基于docker+mysql+mysql-proxy的数据库读写分离功能
我这里使用的是mysql_proxy来实现读写分离,在实现读写分离之前,我使用了docker搭建了主从备份的环境,这是实现读写分离的前提,怎么实现主从备份呢?请看我的这篇文章mysql+docker搭建主从备份好,开始步骤1,先把docker运行起来,主从都要起2,下载mysql_proxywget https://downloads.mysql.com/archives/get/fil...
我这里使用的是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的读写分离功能就实现了。
更多推荐
所有评论(0)