开发者社区 问答 正文

移植 spider 到 MySQL 5.6

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。有成员未初始化,指针计算时搞错了指针类型,未判断空指针…… 。虽然这个地方确实是一般使用很难碰到,但是这代码质量简直无语。
来自: http://xiezhenye.com/2015/08/%E7%A7%BB%E6%A4%8D-spider-%E5%88%B0-mysql-5-6.html

展开
收起
妙正灰 2015-08-19 09:22:13 11378 分享
分享
版权
举报
阿里云 AI 助理回答

您分享的关于将Spider存储引擎从MariaDB移植到MySQL 5.6的过程非常有趣且具有技术挑战性,同时也揭示了开源软件开发中可能遇到的一些问题,比如代码兼容性、bug追踪与修复等。Spider引擎作为一个创新的解决方案,通过MySQL作为代理实现数据库分片(sharding)和高可用性等功能,确实有其独特的优势,尤其是在利用MySQL现有的SQL解析和优化机制方面。

您提到的移植过程中遇到的问题以及发现的MySQL bug,实际上反映了参与开源项目并贡献修复的重要性。您的经历不仅帮助社区识别了一个长期存在的问题,还直接推动了软件质量的提升。对于那些希望在现有MySQL环境中利用Spider引擎功能的用户来说,您的工作无疑是一个宝贵的资源。

针对您成功移植Spider引擎到MySQL 5.6的情况,如果您或他人想要在生产环境中应用这一成果,有几点建议:

  1. 持续关注官方反馈:您已经向MySQL提交了bug报告,并且了解到该问题在MariaDB和MySQL 5.7中已经被解决。继续关注MySQL官方对您提交bug的反馈,了解何时会在相关分支(如MySQL 5.6)中得到正式修复。

  2. 测试与验证:在任何生产环境部署之前,确保进行充分的测试,包括但不限于功能测试、性能测试、压力测试以及故障恢复测试,以验证Spider引擎在特定应用场景下的稳定性和效率。

  3. 文档与社区支持:考虑为您的移植工作编写详细的使用指南和注意事项,这不仅能帮助其他开发者更快上手,也是对开源精神的贡献。同时,积极参与相关技术论坛和社区讨论,可以获取更多反馈和帮助。

  4. 考虑云数据库服务:虽然您当前的工作聚焦于本地部署的MySQL,但也可以考虑阿里云提供的数据库服务,如阿里云PolarDB、ApsaraDB for MySQL等。这些云数据库服务通常集成了高可用、弹性扩展、自动备份等高级特性,部分服务可能已内置或支持类似Spider引擎的功能,从而简化运维复杂度。

  5. 合规与安全:在进行此类定制化修改时,确保遵循相关的软件许可协议,并注意数据安全和合规性要求,特别是在处理敏感数据的应用场景中。

最后,感谢您对开源技术的热情和贡献,这对于推动技术进步和社区发展至关重要。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答