实现目标:主写从读,主服务器只负责对数据写入操作,从服务器只负责对数据查询。

目前主流的实现方式有两种(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如何实现读写分离 mysql8读写分离_mysql

具体实现步骤如下

  1. 下载mysql-proxy

 下载地址:https://downloads.mysql.com/archives/proxy/

选择相应的版本Download

mysql如何实现读写分离 mysql8读写分离_sql_02

 

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

 

mysql如何实现读写分离 mysql8读写分离_读写分离_03

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

mysql如何实现读写分离 mysql8读写分离_mysql8集群读写分离_04

  • /usr/local/mysql-proxy-0.8.5目录下创建logs目录
mkdir logs;

 

mysql如何实现读写分离 mysql8读写分离_mysql如何实现读写分离_05

  • 编辑rw-splitting.lua文件
min_idle_connections = 1, #默认超过4个连接数时,才开始读写分离,改为1
max_idle_connections = 2, #默认8,改为2

mysql如何实现读写分离 mysql8读写分离_读写分离_06

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如何实现读写分离 mysql8读写分离_读写分离_07

以上显示说明mysql-proxy启动成功。

5.mysql-proxy测试

客户端工具远程连接mysql-proxy

mysql如何实现读写分离 mysql8读写分离_mysql_08

mysql如何实现读写分离 mysql8读写分离_mysql_09


 

注意这块连接的是mysql-proxy代理,端口是我们在配置文件中配置的4040。

连接成功,可对数据表进行操作,并在主库和从库查看到相应的表数据,

表明我们的读写分离配置成功。