网上有很多读写分离的中间件,像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
本站部分图文来源于网络,如有侵权请联系删除。