百木园-与人分享,
就是让自己快乐。

Mysql的读写分离中间件该怎么写?听我来说。

网上有很多读写分离的中间件,像proxy,mycat等等,由于本人比较懒,懒得去读各种开源的东西,还是想造轮子来得快。

1、了解mysql通信协议,其中有分4.1之前和4.1版本的,由于4.1之前几乎没有人去使用了,所以我就直接按4.1的版本来实现。

2、找一个解析sql的库,从而得到sql的解析树,从而得知该sql具体是哪类操作,如select、insert、update、delete等等。

3、需要支持监听mysqlclient的连接和去联接mysqlserver服,类似于代理服务器,这里需要连接两个mysqlserver,一个是主库(写)、一个是从库(读)。如下面的配置

监听13306端口,协议为mysql4.1协议,负责监听mysqlclient的连接请求,如下配置:

当mysql连接上xDbRouter时,则会发起两个连接去连接mysqlserver,一个连主server,一个连从server,把myclient与主server通信内容进行解析,并记录相当于信息,比如mysql的权限位这类;
当完成了与主server的通信后,再模拟xdbrouter自己为mysqlclient与从server通信,这里的功能有点复杂,但慢慢把字节调好了,顺序弄好,后面也不会有问题(严谨不能出错)。
![](https://img2022.cnblogs.com/blog/425928/202208/425928-20220819154338758-1596131690.jpg)

解析请求的sql,如果是select的话,就跑从库(slave)

到这里就完成了,在这里需要说明一点的是,每一个mysqlclient连接到xdbrouter,xdbrouter都需要给这个mysqlclient连接创建两个连mysqlserver的连接(一主一库),因为mysql对于请求的sql是序号问题,没有办法将多个mysqlclient连接只共用一库一从的连接,这样做保证了数据的安全。代码已经上传到百云了,欢迎大家与我交流。
链接:https://pan.baidu.com/s/1aCsq7mKaWpbAuFsjPLgz7Q?pwd=xx0j
提取码:xx0j


来源:https://www.cnblogs.com/hellohuang/p/16602312.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » Mysql的读写分离中间件该怎么写?听我来说。

相关推荐

  • 暂无文章