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