实现目标:主写从读,主服务器只负责对数据写入操作,从服务器只负责对数据查询。
目前主流的实现方式有两种(1)mysql-proxy中间件方式实现,(2)mycat中间件实现读写分离。
本教程将mysql-proxy方式均详细的实现完成,供大家参考。
mysql-proxy是mysql官方提供的mysql中间件服务,上游可接入若干个mysql-client,后端可连接若干个mysql-server。
它使用mysql协议,任何使用mysql-client的上游无需修改任何代码,即可迁移至mysql-proxy上。
具体实现方法:使用mysql-proxy中间件作为代理,客户端直接操作该代理,代理根据读写情况自动选择主服务器还是从服务器处理数据。
Mysql-proxy实现读写分离流程如下图:
具体实现步骤如下
- 下载mysql-proxy
下载地址:https://downloads.mysql.com/archives/proxy/
选择相应的版本Download
2.安装mysql-proxy
让我们再看下之前的主机规划(虚机)
主机名 | OS | IP | 用途 | 备注 |
CentOS 7_107 | CentOS7 | 192.168.1.107 | Master/写 | Mysql8/mysql-proxy |
CentOS 7_108 | CentOS7 | 192.168.1.108 | Slave/读 | Mysql8 |
CentOS 7_109 | CentOS7 | 192.168.1.109 | Slave/读 | Mysql8 |
根据之前的规划,我们把mysql-proxy安装在107这台主机上。
将mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz上传至usr/local下
解压该文件
tar -xvf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
修改文件目录名称
mv mysql-proxy-0.8.5-linux-el6-x86-64bit mysql-proxy-0.8.5
3.mysql-proxy配置
- 新建mysql-proxy.cnf配置文件,保存至mysql-proxy-0.8.5同一级目录下,内容如下
[mysql-proxy]
user=root #运行mysql-proxy用户
admin-username=root #主从mysql共有的用户
admin-password=root #用户的密码
proxy-address=192.168.1.107:4040 #mysql-proxy运行ip和端口,不加端口,默认4040
proxy-backend-addresses=192.168.1.107:3306 #指定后端主master写入数据
proxy-read-only-backend-addresses=192.168.1.108:3306 #指定后端从slave读取数据
proxy-lua-script=/usr/local/mysql-proxy-0.8.5/share/doc/mysql-proxy/rw-splitting.lua #指定读写分离配置文件位置
#admin-lua-script=/usr/local/mysql-proxy-0.8.5/share/doc/mysql-proxy/admin-sql.lua #指定管理脚本
log-file=/usr/local/mysql-proxy-0.8.5/logs/mysql-proxy.log #日志位置
log-level=info #定义log日志级别,由高到低分别有(error|warning|info|message|debug)
daemon=true #以守护进程方式运行
keepalive=true #mysql-proxy崩溃时,尝试重启
- 文件赋予权限
chmod 660 mysql-proxy.cnf
- /usr/local/mysql-proxy-0.8.5目录下创建logs目录
mkdir logs;
- 编辑rw-splitting.lua文件
min_idle_connections = 1, #默认超过4个连接数时,才开始读写分离,改为1
max_idle_connections = 2, #默认8,改为2
4.mysql-proxy启动
进入目录/usr/local/mysql-proxy-0.8.5/bin下
- 执行命令 ./mysql-proxy --defaults-file=/usr/local/mysql-proxy.cnf #开启服务
- ps -ef |grep mysql-proxy 查看进程是否成功开启
以上显示说明mysql-proxy启动成功。
5.mysql-proxy测试
客户端工具远程连接mysql-proxy
注意这块连接的是mysql-proxy代理,端口是我们在配置文件中配置的4040。
连接成功,可对数据表进行操作,并在主库和从库查看到相应的表数据,
表明我们的读写分离配置成功。