MySQL Proxy读写分离
# MySQL Proxy读写分离
这里演示本地环境Docker Compose搭建完MySQL主从之后,使用服务端的方式-MySQL Proxy进行读写分离。
说明:
- 这里仅作为实验进行快速搭建,实际生产会有所不同。
- 环境:Ubuntu 20.04.
MySQL Proxy:官方提供的MySQL中间件产品,可以实现负载平衡、读写分离等。 下载地址 (opens new window)
- 读写分离使用lua脚本实现的,现在mysql-proxy里面已经集成,无需再安装
解压安装后,编辑配置文件:
sudo vi /etc/mysql-proxy.cnf
[mysql-proxy]
# 运行mysql-proxy用户
user=root
# 连接后端mysql服务器的用户
admin-username=root
# 连接后端mysql服务器的密码
admin-password=123456
# 代理的监听地址端口,默认端口4040
proxy-address=192.168.0.111:4040
#指定后端主master写入数据
proxy-backend-addresses=192.168.0.100:33061
#指定后端从slave读取数据
proxy-read-only-backend-addresses=192.168.0.100:33071
#指定读写分离配置文件位置
proxy-lua-script=/home/wenwl/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua
log-file=/var/log/mysql-proxy.log
#日志级别,由高到低有(error|warning|info|message|debug)
log-level=debug
#以守护进程方式运行
daemon=true
#mysql-proxy崩溃时,尝试重启
keepalive=true
- 注意MySQL用户授权的问题。
- lua脚本、IP地址根据自己实际情况更改
- 如果没有日志文件,需要自己创建,赋予权限
修改读写分离配置文件,赋予执行权限:
vi share/doc/mysql-proxy/rw-splitting.lua
......
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1, # 默认超过4个连接数时,才开始读写分离,改为1
max_idle_connections = 8, # 默认8
is_debug = false
}
end
......
sudo chmod 660 /etc/mysql-proxy.cnf
启动mysql-proxy:
wenwl@ubuntu-saas:~$ cd mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/bin
wenwl@ubuntu-saas:~/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/bin$ sudo ./mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
# 查看是否启动
netstat -tupln | grep 4040
ps -aux|grep mysql-proxy
# 关闭mysql-proxy使用
killall -9 mysql-proxy
接下来的就是用 MySQL-Cli连接该代理服务器,测试读写分离即可。
- 如果连接不上,排查日志
tail -f /var/log/mysql-proxy.log
参考:
- https://blog.csdn.net/qq_34553294/article/details/84779224
- https://www.cnblogs.com/zezhou/p/11525081.html
上次更新: 5/30/2023, 11:09:19 PM