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

打印 上一主题 下一主题

主题 814|帖子 814|积分 2442

网上有很多读写分离的中间件,像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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张国伟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表