我这里使用的是mysql_proxy来实现读写分离,在实现读写分离之前,我使用了docker搭建了主从备份的环境,这是实现读写分离的前提,怎么实现主从备份呢?请看我的这篇文章mysql+docker搭建主从备份

好,开始步骤
1,先把docker运行起来,主从都要起
在这里插入图片描述

2,下载mysql_proxy

wget https://downloads.mysql.com/archives/get/file/mysql-proxy-0.8.5-linux-debian6.0-x86-64bit.tar.gz

3,解压tar包

tar zxvf mysql-proxy-0.8.5-linux-debian6.0-x86-64bit.tar.gz

4,解完包后,给mysql_proxy文件夹改名

mv mysql-proxy-0.8.5-linux-debian6.0-x86-64bit mysql-proxy

5,复制到/usr/local/下

cp -r mysql-proxy /usr/local/

6,进入到mysql_proxy目录下

cd /usr/local/mysql-proxy

7,创建脚本存放目录

mkdir lua #创建脚本存放目录

8,创建日志目录

mkdir logs #创建日志目录

9,创建一个日志文件

touch logs/mysql-proxy.log

10,修改日志文件的读写权限

chmod 777 logs/mysql-proxy.log

11,将share下的配置文件复制到脚本存放目录下

cp share/doc/mysql-proxy/rw-splitting.lua ./lua #复制读写分离配置文件
cp share/doc/mysql-proxy/admin-sql.lua ./lua #复制管理脚本

12,去/etc/下创建mysql_proxy的配置文件

vim /etc/mysql-proxy.cnf   #创建配置文件

13:,在mysql-proxy.cnf中配置参数

[mysql-proxy]
user=root  #运行mysql-proxy用户
admin-username=proxy  #用户名称
admin-password=123456  #用户密码
log-level=info  #定义log日志级别,由高到低分别有(error|warning|info|message|debug)
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log  #日志路径
proxy-address=10.10.21.189:4040  #绑定mysql-proxy访问地址与端口
proxy-backend-addresses=10.10.21.189:3339  #设置主库ip与port
proxy-read-only-backend-addresses=10.10.21.189:3340  #设置从库ip与port
proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua  #指定读写分离配置文件位置
admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua  #指定管理脚本
daemon=true  #以守护进程方式运行
keepalive=true  #mysql-proxy崩溃时,尝试重启

端口配置这一块要注意,
proxy-address这里一定要配置你mysql-proxy当前所运行的环境的ip
proxy-backend-addresses如果你和我一样是docker运行的,直接使用docker运行的环境ip和映射端口

14,修改配置文件的读写权限

chmod 660 /etc/mysql-porxy.cnf

15,修改读写分离的配置文件,使更容易的触发读写分离

vim /usr/local/mysql-proxy/lua/rw-splitting.lua
找到下面的代码,覆盖对应部分即可,其余代码均保留不变。


if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1, #默认超过4个连接数时,才开始读写分离,改为1
max_idle_connections = 1, #默认8,改为1
is_debug = false
}
end

16,启动mysql-proxy

/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf

可以在后面加个 & 号代表后台运行

17,查看是否启动成功

netstat -tupln | grep 4040

在这里插入图片描述

18,连接mysql-proxy查看效果
我在本地起了两个cmd
在这里插入图片描述
连接mysql-proxy

mysql -u root -h 10.10.21.189 -P 4040 -p123456

在两个cmd终端都对其进行连接
然后我关闭了一下主从备份,分别在数据库中插入数据
这是未开启主从前,在mysql-proxy下查询的主库数据
在这里插入图片描述
这是未开启主从前,在mysql-proxy下查询的从库数据
在这里插入图片描述

注意,从库中有个xixi是主库中没有的

然后开启主从备份,这时候我主从这里出了点小bug,同步的sql线程挂掉了
然后通过主从失效bug的解决方案成功解决,这里就记录一下,以备后用。

然后成功开启了主从备份
在这里插入图片描述
这时候在重新连接两个cmd
进行查询语句
在这里插入图片描述
可以看到我的从库的数据也查出来了,这就代表,本次查询是在从库进行的。
那么插入数据呢?

在这里插入图片描述
同样插入成功,那么怎么看他是在哪一个表插入的呢?
你可以看看数据库日志,或者用辅助工具可以检测出来,这里就不细讲了。
好,那么docker+mysql+mysql-proxy的读写分离功能就实现了。

更多推荐