mysql读写分离

 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  | --- |
+-------+-----+

 

你可能感兴趣的:(mysql读写分离)