介绍 mixer是一个用go实现的mysql proxy,支持基本的mysql代理功能。 mysql的中间件很多,对于市面上面现有的功能强大的proxy,我主要考察了如下几个: mysql-proxy,mysql官方的代理,使用起来并不友好,需要进行lua定制,而且本人对其稳定性和性能存疑。 C
当然,还有很多强大的proxy,我不可能一一涉及,而现阶段我们项目中使用的是Atlas(这算不算给Atlas打了一个广告?)。
既然有这么多的proxy,为什么我还想自己实现一个呢?可能最主要的原因在于兴趣使然吧。
当开始着手进行mixer开发的时候,我就知道,mixer不是mysql,它不可能proxy所有mysql的功能。所以,我决定mixer只支持如下mysql命令:
COM_QUERY[mixer](https://github.com/siddontang/mixer不支持命令挺多的,列举一些:
set variable。如果支持,mixer需要维护每一个变量的状态,增加了复杂度。但mixer支持autocommit和names的设置。虽然很多功能现阶段没有,但不排除后续支持。
mixer提供了一套mysql高可用使用方案,现阶段主要功能如下:
读写分离,将select发送到slave,其余发送到master执行,事物所有在master执行。现阶段只支持一主一备。mixer还不完善,很多功能需要实现,后续优先需要实现的功能:
parser,将sql进行语法解析,构建AST,在proxy层面就防止一些mysql隐患,譬如注入攻击,delete没有where等。代码在这里https://github.com/siddontang/mixer。非常希望对proxy感兴趣的童鞋参与进来,共同完善mixer,使其成为另一个mysql中间件解决方案。