1、sever3主机 安装读写分离代理 mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
[root@server3 ~]# tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -C /usr/local/
[root@server3 ~]# cd /usr/local/
[root@server3 local]# ln -s mysql-proxy-0.8.5-linux-el6-x86-64bit/ mysql-proxy
2、修改读写分离的lua脚本
[root@server3 local]# cd mysql-proxy/share/doc/mysql-proxy/
[root@server3 mysql-proxy]# vim rw-splitting.lua
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1,
max_idle_connections = 2, ##超过2个链接,实现读写分离
is_debug = false
}
end
3、编写配置文件,便于安装
[root@server3 mysql-proxy]# mkdir conf ##配置文件
[root@server3 mysql-proxy]# mkdir logs ##日志文件
[root@server3 mysql-proxy]# cd conf/
[root@server3 conf]# vim mysql-proxy.conf
[mysql-proxy]
user=root
proxy-address=172.25.77.3:3306
proxy-read-only-backend-addresses=172.25.77.5:3306
proxy-backend-addresses=172.25.77.4:3306
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true
##启动失败,原因是 mysql-proxy.conf 文件权限太大
[root@server3 conf]# /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
2018-07-06 14:30:28: (critical) mysql-proxy-cli.c:326: loading config from '/usr/local/mysql-proxy/conf/mysql-proxy.conf' failed: permissions of /usr/local/mysql-proxy/conf/mysql-proxy.conf aren't secure (0660 or stricter required)
2018-07-06 14:30:28: (message) Initiating shutdown, requested from mysql-proxy-cli.c:328
2018-07-06 14:30:28: (message) shutting down normally, exit code is: 1
##修改权限后,正常启动
[root@server3 conf]# chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf
[root@server3 conf]# /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
[root@server3 conf]# netstat -antlp | grep 3306
tcp 0 0 172.25.77.3:3306 0.0.0.0:* LISTEN 1102/mysql-proxy
4、主库server4主机配置
##建立远程用户
mysql> grant select,insert,update on test.* to hec@'172.25.77.%' identified by 'Westos#123';
##主库、从库安装 lfos
[root@server4 ~]# yum install -y lsof
5、物理主机测试
##1台主机链接mysql-proxy服务器
##主库发现1台主机链接
[root@server4 ~]# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 1166 mysql 34u IPv6 8524 0t0 TCP *:mysql (LISTEN)
mysqld 1166 mysql 51u IPv6 9337 0t0 TCP server4:mysql->server5:54617 (ESTABLISHED)
mysqld 1166 mysql 52u IPv6 9497 0t0 TCP server4:mysql->server3:42082 (ESTABLISHED)
##从库只有主从链接
[root@server5 ~]# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 1776 mysql 17u IPv6 9563 0t0 TCP *:mysql (LISTEN)
mysqld 1776 mysql 52u IPv4 9594 0t0 TCP server5:54617->server4:mysql (ESTABLISHED)
##2台主机链接mysql-proxy服务器
##主库发现2台主机链接
[root@server4 ~]# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 1166 mysql 34u IPv6 8524 0t0 TCP *:mysql (LISTEN)
mysqld 1166 mysql 51u IPv6 9337 0t0 TCP server4:mysql->server5:54617 (ESTABLISHED)
mysqld 1166 mysql 52u IPv6 9497 0t0 TCP server4:mysql->server3:42082 (ESTABLISHED)
mysqld 1166 mysql 56u IPv6 9966 0t0 TCP server4:mysql->server3:42083 (ESTABLISHED)
##从库只有主从链接
[root@server5 ~]# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 1776 mysql 17u IPv6 9563 0t0 TCP *:mysql (LISTEN)
mysqld 1776 mysql 52u IPv4 9594 0t0 TCP server5:54617->server4:mysql (ESTABLISHED)
##3台主机链接mysql-proxy服务器
##主库发现2台主机链接
[root@server4 ~]# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 1166 mysql 34u IPv6 8524 0t0 TCP *:mysql (LISTEN)
mysqld 1166 mysql 51u IPv6 9337 0t0 TCP server4:mysql->server5:54617 (ESTABLISHED)
mysqld 1166 mysql 52u IPv6 9497 0t0 TCP server4:mysql->server3:42082 (ESTABLISHED)
mysqld 1166 mysql 56u IPv6 9966 0t0 TCP server4:mysql->server3:42083 (ESTABLISHED)
##从库1台主机链接
[root@server5 ~]# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 1776 mysql 17u IPv6 9563 0t0 TCP *:mysql (LISTEN)
mysqld 1776 mysql 50u IPv6 10237 0t0 TCP server5:mysql->server3:59143 (ESTABLISHED)
mysqld 1776 mysql 52u IPv4 9594 0t0 TCP server5:54617->server4:mysql (ESTABLISHED)
说明:第3台主机链接到从库上
##mysql-proxy服务器
[root@server3 conf]# netstat -antlp | grep 3306
tcp 0 0 172.25.77.3:3306 0.0.0.0:* LISTEN 1102/mysql-proxy
tcp 0 0 172.25.77.3:3306 172.25.77.250:55089 ESTABLISHED 1102/mysql-proxy
tcp 0 0 172.25.77.3:42082 172.25.77.4:3306 ESTABLISHED 1102/mysql-proxy
tcp 0 0 172.25.77.3:3306 172.25.77.250:55090 ESTABLISHED 1102/mysql-proxy
tcp 0 0 172.25.77.3:42083 172.25.77.4:3306 ESTABLISHED 1102/mysql-proxy
tcp 0 0 172.25.77.3:3306 172.25.77.250:55091 ESTABLISHED 1102/mysql-proxy
tcp 0 0 172.25.77.3:59143 172.25.77.5:3306 ESTABLISHED 1102/mysql-proxy
6、第3台链接主机测试
##注意:此时链接的是从库!
[kiosk@foundation12 Desktop]$ mysql -h 172.25.77.3 -u hec -p
MySQL [(none)]> insert into test.hello values ('test','---');
Query OK, 1 row affected (0.15 sec)
##主库查看,数据已写入,说明读写分离成功!
##第3台主机虽然链接从库,但是写入时,mysql-proxy自动实现主库写入;
[root@server4 ~]# mysql -p
mysql> select * from test.hello;
+-------+-----+
| name | id |
+-------+-----+
| mouse | 000 |
| cat | 111 |
| user1 | 001 |
| user2 | 002 |
| user3 | 003 |
| user3 | 003 |
| user4 | 004 |
| user5 | 005 |
| test | --- |
+-------+-----+