原理:通过mysql-proxy这种方式收到数据的写入(insert ,update)操作时转发到后端主库 写入,收到数据的读(select)操作时
转发到后端从库 读取。实现 主库负责--写入,从库负责--读取。
注意:Proxy其实不是一台机器,只是一个连接方式,读取数据的时候自动从Salve上取,写数据则自动向Master中写。
实验规划:
实验前先做好 主从架构
主---192.168.1.252 (mysql-5.7 ,三台版本一致)
从---192.168.1.101
proxy---192.168.1.102
步骤:
1.安装mysql-proxy
yum install lua(新版本已经集成了)
wget https://downloads.mysql.com/archives/get/p/21/file/mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit.tar.gz
tar zxvf mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit.tar.gz
mv mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit /usr/local/mysql-proxy
cd /usr/local/mysql-proxy
创建日志和lua脚本目录
mkdir logs lua
复制lua读写脚本和管理脚本
cp share/doc/mysql-proxy/rw-splitting.lua ./lua
cp share/doc/mysql-proxy/admin-sql.lua ./lua
2.创建配置文件
vim /etc/mysql-proxy.cnf
内容如下:
[mysql-proxy]
user=root #运行mysql-proxy用户
admin-username=mysql_proxy #mysql-proxy平台链接后端主从的用户(所以这个用户需要在主从授权给这个机器)
admin-password=proxy123456 #mysql-proxy平台链接后端主从的密码
proxy-address=192.168.1.102:4040 #proxy服务监听的端口
proxy-read-only-backend-addresses=192.168.1.101:3306 #后端负责 只读 的机器(从)
proxy-backend-addresses=192.168.1.252:3306 #后端负责 写入 的机器(主)
proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua #读写脚本
admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua #管理脚本
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log
log-level=debug
daemon=true #以守护进程的方式运行
keepalive=true #心跳检测
注意:(在服务器上配置文件要把注释都去掉,不然会报错。)
保存退出。赋予660权限,不然会报错。
chmod 660 /etc/mysql-proxy.cnf
3.##修改读写配置文件
vi /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 = 2, #默认8,改为2
is_debug = false
}
end
4.启动服务并查看
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
image.png
关闭可以用killall -9 mysql-proxy 或者kill -9 ID
5.主从服务器授权mysql-proxy用户
在主执行:(事先做好主从架构,从库会自动吧这个操作更新过去,或者在手动去从库也执行一遍)
grant all privileges on *.* to 'mysql_proxy'@'192.168.1.%' identified by 'proxy123456';
flush privileges;
测试
使用客户端去链接mysql-proxy(1.102)(开2个以上客户端链接)
mysql -umsql_proxy -p proxy123456 -h 192.168.1.102 -P4040
接下来,测试数据。(主从都开启时,先添加一条数据)
image.png
此时如果停掉slave,在添加数据
stop slave;
image.png
发现并没有刚才添加的id为2的这条数据。
因为此时slave已经停掉了,没有负责给我们提供查询操作的服务了,所以查不到了。刚才可以写入,也是意味着 写入操作是有 master来完成的。
这时恢复slave,再查询
start slave;
image.png
这时2已经有了,恢复了slave后,先主从通信同步了刚才的数据,再继续提供查询操作。
到此,读写分离完成。
参考:
[https://www.cnblogs.com/fyc119/p/7529903.html](https://www.cnblogs.com/fyc119/p/7529903.html)
网友评论