移植 spider 到 MySQL 5.6

jopen 9年前發布 | 11K 次閱讀 spider

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=<mysql install dir>
cd storage/spider
make
make install

之后,執行附帶的 install_spider.sql 安裝插件,創建所需要的系統表。

mysql ... < scripts/install_spider.sql

具體文檔參見 https://mariadb.com/kb/en/mariadb/spider/

在測試過程中,發現安裝插件以后,重啟 MySQL 后會 crash,然后再也啟動不了,移除 ha_spider.so 后才行。然而在 MariaDB 中卻是正常的。開始以為是自己移植過程帶來的 bug,或者有什么兼容問題未解決。追蹤到后來,發現這居然是 MySQL 自身的 bug。于是去提交了一下。http://bugs.mysql.com/bug.php?id=78050

在使用外部 XA 的時候,如果沒啟用 binlog,會把 XA 信息通過 TC_LOG_MMAP 來持久化。然后 bug 就出在了那里。

這個 bug 曾經在 2009 年就被發現過,2012 年被 fix 過。但是顯然并沒有改對。待我自己做了 fix 以后,進一步發現,這個 bug 在 MariaDB 中已經被修復過,然后發現原來在 MySQL 5.7 分支下也是修復過的,但是并沒應用到 5.6 分支。

都是幾個相當低級的 bug。有成員未初始化,指針計算時搞錯了指針類型,未判斷空指針…… 。雖然這個地方確實是一般使用很難碰到,但是這代碼質量簡直無語。

</div>
來自:http://xiezhenye.com/2015/08/%E7%A7%BB%E6%A4%8D-spider-%E5%88%B0-mysql-5-6.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!