基于mysql-proxy配置mysql读写分离

原理图

在这里插入图片描述

环境说明

  • 已关闭防火墙、selinux;
  • 已二进制安装mysql-5.7.22版本;
  • 已配置好mysql主从,配置详情请参照mysql主从配置
  • 所用主机所用IP地址如下:
IP地址角色安装
192.168.91.128mysql-proxy中间件mysql-proxy、mariadb
192.168.91.135master(write)mysql-5.7.22
192.168.91.136salve(read)mysql-5.7.22

配置步骤

  • 在192.168.91.128主机上,下载mysql-proxy(点击下载),并解压
[root@localhost ~]# tar -xf mysql-proxy-0.8.4-linux-el6-x86-64bit.tar.gz -C /usr/local/
[root@localhost ~]# ln -s /usr/local/mysql-proxy-0.8.4-linux-el6-x86-64bit/ /usr/local/mysql-proxy
[root@localhost ~]# ll /usr/local/
lrwxrwxrwx. 1 root root  49 Nov 26 16:53 mysql-proxy -> /usr/local/mysql-proxy-0.8.4-linux-el6-x86-64bit/
  • 备份配置文件,并添加主配置文件,并将主配置文件权限修改为660
[root@localhost ~]# cd /usr/local/mysql-proxy
## 备份读写分离配置文件 ##
[root@localhost mysql-proxy]# cp share/doc/mysql-proxy/rw-splitting.lua{,.bak}
## 备份管理脚本 ##
[root@localhost mysql-proxy]# cp share/doc/mysql-proxy/admin-sql.lua{,.bak}
## 创建主配置文件目录 ##
[root@localhost mysql-proxy]# mkdir /etc/mysql-proxy
[root@localhost mysql-proxy]# vim /etc/mysql-proxy/mysql-proxy.conf
[mysql-proxy]
user=root		##运行mysql-proxy用户
admin-username=sepa		##主从mysql共有用户
admin-password=123456		##用户密码
proxy-address=192.168.91.128:4040		##mysql-proxy运行ip和端口,不加端口,默认4040
proxy-read-only-backend-addresses=192.168.91.136		##指定后端从slave读取数据
proxy-backend-addresses=192.168.91.135		##指定后端主master写入数据
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua		##指定读写分离配置文件位置
admin-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/admin-sql.lua		##指定管理脚本
log-file=/tmp/mysql-proxy.log		##日志文件位置,目录必须存在
log-level=info			##定义log日志级别,由高到低分别有{error|warning|info|message|debug}
daemon=true			##已守护进程方式运行,不能掉
keepalive=true		##mysql-proxy崩溃时,尝试重启
[root@localhost mysql-proxy]# chmod 660 /etc/mysql-proxy/mysql-proxy.conf
  • 修改读写分离配置文件
[root@localhost mysql-proxy]# vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua 
......
if not proxy.global.config.rwsplit then
        proxy.global.config.rwsplit = {
                min_idle_connections = 1,
                max_idle_connections = 1,

                is_debug = false
        }
end
......
  • 启动mysql-proxy
[root@localhost mysql-proxy]# /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy/mysql-proxy.conf
[root@localhost mysql-proxy]# ss -ntl
State      Recv-Q Send-Q                    Local Address:Port                      Peer Address:Port   
LISTEN     0      128                      192.168.91.128:4040                                 *:*     
  • 在192.168.91.35主机上(master),创建管理用户并授权,从服务器同步相应的操作
mysql> grant all on *.* to 'sepa'@'192.168.91.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
  • 在192.168.91.128主机上使用授权用户登录数据库
[root@localhost mysql-proxy]# yum -y install mariadb
[root@localhost mysql-proxy]# mysql -usepa -p123456 -h192.168.91.128 -P4040
Welcome to the MariaDB monitor.  Commands end with ; or \g.

MySQL [(none)]> show  databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)
  • 在192.168.91.136主机上,将从同步功能停止掉;在192.168.91.128主机上创建数据库并查询数据库来验证读写分离是否成功
## 在192.168.91.128主机上执行 ##
MySQL [(none)]> create database test;
Query OK, 1 row affected (0.00 sec)

## 在192.168.91.136主机上执行 ##
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

## 在192.168.91.128主机上执行 ##
MySQL [(none)]> create table mysql.haha(id int not null,name char not null);
Query OK, 0 rows affected (0.02 sec)

MySQL [(none)]> show tables from test;
Empty set (0.00 sec)
注:查不到表则说明写是在192.168.91.135(master)主机上执行的,读则在192.168.91.136(slave)主机上执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值