MariaDB 中自帶了很多 MySQL 中沒有的插件。我對其中的 spider 存儲引擎很有興趣。這個引擎可以讓 MySQL 作為一個 proxy ,來實現
MariaDB 中自帶了很多 MySQL 中沒有的插件。我對其中的 spider 存儲引擎很有興趣。這個引擎可以讓 MySQL 作為一個 proxy ,來實現 sharding、高可用等功能。這些功能已經有一些產品實現了,比如 MaxScale、Cobar、OneProxy、Atlas。但是我覺著 spider 把自己作為一個存儲引擎來實現這些功能是有其優勢的。SQL 解析和查詢優化是個非常復雜而且很難做好的工作。其他替代產品都是自己實現,由于復雜性,這些產品都帶來了一下限制,沒能支持全部常見的 SQL 語句,給使用和實施帶來了困難。而作為一個存儲引擎,這些工作都由 MySQL 自身完成了,后面的工作就會簡單很多,想做點優化的話也會容易些。
由于 MariaDB 從 MySQL 5.5 時代就分道揚鑣了,做過很多改動后,和目前版本的 MySQL 已經有了不小差異,所以插件基本上沒法直接拿到 MySQL 里編譯使用。我就花了點功夫,,把 spider 引擎移植到了 MySQL 5.6。
https://github.com/xiezhenye/mysql-plugin-spider-engine
編譯使用和一般的插件差不多
cp -r src /path/to/mysql-src/storage/spider cd /path/to/mysql-src cmake . -DBUILD_CONFIG=mysql_release -DCMAKE_INSTALL_PREFIX=之后,執行附帶的 install_spider.sql 安裝插件,創建所需要的系統表。
mysql ... < scripts/install_spider.sql具體文檔參見 https://mariadb.com/kb/en/mariadb/spider/
在測試過程中,發現安裝插件以后,重啟 MySQL 后會 crash,然后再也啟動不了,移除 ha_spider.so 后才行。然而在 MariaDB 中卻是正常的。開始以為是自己移植過程帶來的 bug,或者有什么兼容問題未解決。追蹤到后來,發現這居然是 MySQL 自身的 bug。于是去提交了一下。?id=78050
在使用外部 XA 的時候,如果沒啟用 binlog,會把 XA 信息通過 TC_LOG_MMAP 來持久化。然后 bug 就出在了那里。
這個 bug 曾經在 2009 年就被發現過,2012 年被 fix 過。但是顯然并沒有改對。待我自己做了 fix 以后,進一步發現,這個 bug 在 MariaDB 中已經被修復過,然后發現原來在 MySQL 5.7 分支下也是修復過的,但是并沒應用到 5.6 分支。
都是幾個相當低級的 bug。有成員未初始化,指針計算時搞錯了指針類型,未判斷空指針…… 。雖然這個地方確實是一般使用很難碰到,但是這代碼質量簡直無語。
本文永久更新鏈接地址:
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com