欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mysql-proxy实现MySQL读写分离

程序员文章站 2022-05-02 10:04:13
...

之前写过ProxySQL实现MySQL数据库的读写分离,今天再来一个MySQL-Proxy实现MySQL的读写分离!

操作很简单!

实验环境:

防火墙关闭
主库:172.25.1.2 主机名:node2
从库:172.25.1.3 主机名:node3
主库和从库以实现基于GTID的主从复制!
Mysql-proxy:172.25.1.5 主机名:node5

我用的包是mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
软件版本不一样可能会有报错,服务启动失败。

在proxy端:

[aaa@qq.com ~]# tar -zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -C /usr/local/
[aaa@qq.com ~]# cd /usr/local/
[aaa@qq.com local]# ln -s mysql-proxy-0.8.5-linux-el6-x86-64bit/ mysql-proxy
[aaa@qq.com mysql-proxy]# mkdir log
[aaa@qq.com mysql-proxy]# mkdir conf
#编写配置文件
[aaa@qq.com mysql-proxy]# vim conf/mysql-proxy.conf
[aaa@qq.com mysql-proxy]# cat conf/mysql-proxy.conf 
[mysql-proxy]
proxy-address=0.0.0.0:3306  			#端口
proxy-backend-addresses=172.25.1.2:3306           #master
proxy-read-only-backend-addresses=172.25.1.3:3306 	#只读slave
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua	#lua脚本路径
pid-file=/usr/local/mysql-proxy/log/mysql-proxy.pid		#mysql-proxy.pid路径
plugins=proxy
log-file=/usr/local/mysql-proxy/log/mysql-proxy.log		#日志文件路径
log-level=debug						#日志水平
keepalive=true
daemon=true

[aaa@qq.com bin]# chmod 0660 /usr/local/mysql-proxy/conf/mysql-proxy.conf	#授权
#启动
[aaa@qq.com bin]# ./mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf 			
[aaa@qq.com bin]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2628/mysql-proxy 	#可以看到mysql-proxy启动成功

在主库:

[aaa@qq.com ~]# mysql -uroot -p
#创建一个用户
aaa@qq.com [(none)]>create user 'rw'@'172.25.1.%' identified by 'rw123';
Query OK, 0 rows affected (0.01 sec)
#授权
aaa@qq.com [(none)]>grant all on *.* to 'rw'@'172.25.1.%';
Query OK, 0 rows affected (0.00 sec)
#刷新
aaa@qq.com [(none)]>flush privileges;
Query OK, 0 rows affected (0.00 sec)

测试:

我的测试端是node1,172.25.1.1

#装一个mysql命令
[aaa@qq.com log]# yum install mysql -y
#远程连接
[aaa@qq.com log]# mysql -h 172.25.1.5 -urw -prw123

Mysql-proxy实现MySQL读写分离
测试读写分离:

查看我的lua脚本:

[aaa@qq.com etc]# vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
Mysql-proxy实现MySQL读写分离可以看到这有一个连接数,代表这何时触发lua脚本,实现读写分离!

我现在关掉我的从库node2

Mysql-proxy实现MySQL读写分离
然后测试端node1去测试:

  • 可以看到没有触发读写分离,读写都在主库
    Mysql-proxy实现MySQL读写分离

退出数据库再连接:(增加数据库的连接数)

  • 可以看到还没有触发,读写依然都是在master’
    Mysql-proxy实现MySQL读写分离

  • 退出数据库,再连接,可以看到读写分离实现,读在从库
    Mysql-proxy实现MySQL读写分离

  • 启动从库。自动从主库同步数据
    Mysql-proxy实现MySQL读写分离

  • 测试端node1再查看表,在从库上读取成功
    Mysql-proxy实现MySQL读写分离