Mysql主从复制、mysql-proxy读写分离

286 阅读2分钟

准备两台mysql服务器,master(192.168.43.64)、slave(192.168.84.129)

master配置:

log-bin=mysql-bin binlog_format=mixed server_id=1 binlog_checksum=none

slave配置:

![](https://picb.zhimg.com/80/v2-f34693b9f78151c2b91ac8c1d83cb6e1_720w.jpg)

然后给master授权并查看二进制文件名称和位置:

![](https://pic3.zhimg.com/80/v2-96e683556c7243920fe637fbfda7169e_720w.jpg)

进入从服务器执行如下sql并开启slave、查看slave状态:

change master to  master_host='192.168.43.64' ,master_user='root' ,master_password='123' ,master_log_file='mysql-bin.000032' ,master_log_pos=1912;
![](https://pic3.zhimg.com/80/v2-1adc309e6cd41ec4f7179a91d4c845fa_720w.jpg)

最后验证主从配置:

![](https://pic4.zhimg.com/80/v2-a74f614938a5236a481089223b11163c_720w.jpg)

问题总结:

  1、两个主从mysql要能远程登录,否则相互无法配置成功。

  2、由于mysql5以前有binlog-checksum,导致主从配置失败,在配置文件中加binlog_checksum=none后重启mysql服务。

![](https://pic3.zhimg.com/80/v2-da8428adfcb76d4b167bfe3dbe51cc70_720w.jpg)

读写分离的实现:

下载mysql-proxy,安装缺少的vc库,在mysql-proxy文件夹中创建mysql-proxy.cnf配置文件。如下所示:

[mysql-proxy]
admin-username=root
admin-password=root
admin-lua-script=D:/BtSoft/WebSoft/mysql-proxy/lib/mysql-proxy/lua/admin.lua
proxy-backend-addresses=192.168.43.64:3306
proxy-read-only-backend-addresses=192.168.84.129:3306
proxy-lua-script=D:/BtSoft/WebSoft/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
log-file=D:/BtSoft/WebSoft/mysql-proxy/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true

参数介绍如下:

admin-username:用于中间件连接的用户,这里我还是用root偷懒
admin-password:同上用户密码
admin-lua-script:根据存放的文件位置自行调整
proxy-backend-addresses:主库服务器+端口
proxy-read-only-backend-addresses:从库服务器+端口,多个从库用,隔开    
proxy-lua-script:根据存放的文件位置自行调整
log-file:日志文件存放位置,如果你指定了一个路径,请确保手动创建了对应的文件夹,否则会报错
log-level:日志级别
daemon:以守护进程方式运行
keepalive:长连接

修改rw-splitting.lua中的4改为1,#默认超过4个连接数时,才开始读写分离

if not proxy.global.config.rwsplit then
    proxy.global.config.rwsplit = {
        min_idle_connections = 1,
        max_idle_connections = 8,
        is_debug = false
    }
end

打开cmd输入命令:

D:\BtSoft\WebSoft\mysql-proxy\bin\mysql-proxy -P 192.168.43.64:4040 --defaults-file=D:\BtSoft\WebSoft\mysql-proxy\mysql-proxy.conf

执行结果:

![](https://pic1.zhimg.com/80/v2-3766aaa85a1dac88a7b6e71256bc78ee_720w.jpg)

出现上图则说明mysql-proxy配置成功。

验证是否成功读写分离:

1.连接mysql-proxy

![](https://pic2.zhimg.com/80/v2-140fd4ff574881de659fffb8fbbe2dde_720w.jpg)

插入一条数据到mysql-proxy中,如图

![](https://picb.zhimg.com/80/v2-8f759a8d2bea6849ae444d08ecd3b352_720w.jpg)

在从服务器查看,如图:

![](https://picb.zhimg.com/80/v2-e77fbfe628e5d13579ff8fac370572cd_720w.jpg)

以上内容希望帮助到大家, 很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家 ,需要戳这里 PHP进阶架构师>>>实战视频、大厂面试文档免费获取