Mysql的读写分离
Mysql的读写分离是基于数据的主从复制,所以在配置读写的服务器上分别配置GTID主从复制,具体配置方法可参考上一篇《MySQL的异步、半异步、组复制》一文,这里仅给出测试结果。
server2上检查主从配置:
下面开始设置读写分离。
我们直接使用官方提供的插件Mysql-proxy。
1、MySQL-proxy简介
mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等。MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。
当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多 个proxy的连接参数即可。
2、安装及配置
下载链接:https://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
安装:因为是rmp包,所以可以直接通过yum仓库进行直接安装。
配置:
因为需要自己编写配置文件,所以创建配置文件的目录以及配置编写配置文件:
####创建配置文件目录
[aaa@qq.com local]# mkdir /usr/local/mysql-proxy/bin/conf
####编写配置文件
[aaa@qq.com local]# /usr/local/mysql-proxy/bin/conf/mysql-proxy.conf
配置文件内容:
....
1 [mysql-proxy]
2 proxy-address=0.0.0.0:3306 ##监听本机端口
3 proxy-backend-address=192.168.1.110:3306 ##读写数据库
4 proxy-read-only-backend-address=192.168.1.120:3306 ##只读数据库
5 proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
##读写启动配置
6 pid-file=/usr/local/mysql-proxy/log/mysql-proxy.pid ##pid存储位置
7 log-file=/usr/local/mysql-proxy/log/mysql-proxy.log ##日志存储位置
8 plugins=proxy ##以插件形式启动
9 log-level=debug ##日志级别
10 keepalive=true ##检测端口
11 daemon=true ##以守护进程方式(后台)运行
....
####修改配置文件的权限
[aaa@qq.com local]# chmod 660 /usr/local/mysql-proxy/bin/conf/mysql-proxy.conf
####创建日志目录
[aaa@qq.com local]# mkdir /usr/local/mysql-proxy/log
####编写lua启动脚本
[aaa@qq.com local]# vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
脚本内容:
##编写lua启动脚本:/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua 设置
....
38 if not proxy.global.config.rwsplit then
39 proxy.global.config.rwsplit = {
40 min_idle_connections = 1,
41 max_idle_connections = 2, ##超过两台时,启动读写分离
42
43 is_debug = false
44 }
45 end
....
3、启动并测试
启动:启东时需要制定配置文件路径
当查看的日志内容为目标主机时,证明启动成功:
在数据库中对权限进行设置:
###在数据库中对用户授权
mysql> GRANT INSERT,UPDATE,SELECT ON *.* TO aaa@qq.com'%' IDENTIFIED BY 'Linux+755';
###刷新授权表
mysql> FLUSH PRIVILEGES;
###创建测试表
mysql> USE test;
Database changed
mysql> CREATE TABLE testtable(
-> username VARCHAR(10) NOT NULL,
-> password VARCHAR(15) NOT NULL);
mysql> DESC testtable;
然后使用客户端远程登录,该用户也装有数据库,对数据库进行远程登录。
在server3中查看登录时的分配:
然后在客户端插入数据:
在server1上查看:
此时在server2上也可以查看到数据,是因为我们设置的半同步,关闭半同步,此时客户端插入的数据只能在server1上查看。