+-------------------+
| Tables_in_student |
+-------------------+
| info? ? ? ? ? ? ? ? ? ? |
+-------------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM info;
+------+-----------+
| id? ? | name? ? ? |
+------+-----------+
|? ? 1? | hanmeimei |
|? ? 2? | lilei? ? ? ? ? ? |
+------+-----------+
2 rows in set (0.00 sec)
?
[root@client ~]# mysql -h192.168.4.20 -uuser02 -ppwd123
mysql> SELECT * FROM student.info;
+------+-----------+
| id? | name? ? ? ? |
+------+-----------+
|? ? 1 | hanmeimei |
|? ? 2 | lilei? ? ? ? ? ? |
+------+-----------+
2 rows in set (0.00 sec)
4)观察MySQL代理访问的网络连接
在Proxy代理商可看到与MySQL读、写服务器的网络连接:
[root@proxy mysql-proxy]# netstat -anpt | grep mysql
tcp? ? ? ? 0? ? ? 0 192.168.4.30:3306? ? ? ? ? 0.0.0.0:*? ? ? ? ? ? ? ? ? LISTEN? ? ? 16119/mysql-proxy?
tcp? ? ? ? 0? ? ? 0 192.168.4.30:60975? ? ? ? ? 192.168.4.10:3306? ? ? ? ? ESTABLISHED 16119/mysql-proxy?
tcp? ? ? ? 0? ? ? 0 192.168.4.30:60974? ? ? ? ? 192.168.4.10:3306? ? ? ? ? ESTABLISHED 16119/mysql-proxy?
tcp? ? ? ? 0? ? ? 0 192.168.4.30:60977? ? ? ? ? 192.168.4.10:3306? ? ? ? ? ESTABLISHED 16119/mysql-proxy?
tcp? ? ? ? 0? ? ? 0 192.168.4.30:60978? ? ? ? ? 192.168.4.10:3306? ? ? ? ? ESTABLISHED 16119/mysql-proxy?
tcp? ? ? ? 0? ? ? 0 192.168.4.30:60976? ? ? ? ? 192.168.4.10:3306? ? ? ? ? ESTABLISHED 16119/mysql-proxy?
在Master上可看到来自Slave和Proxy代理的网络连接:
[root@master mysql]# netstat -anpt | grep mysql
tcp? ? ? ? 0? ? ? 0 :::3306? ? ? ? ? ? ? ? ? ? :::*? ? ? ? ? ? ? ? ? ? ? ? LISTEN? ? ? 3788/mysqld? ? ? ?
tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.4.10:3306? ? ::ffff:192.168.4.30:60974? ESTABLISHED 3788/mysqld? ? ? ?
tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.4.10:3306? ? ::ffff:192.168.4.30:60978? ESTABLISHED 3788/mysqld? ? ? ?
tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.4.10:3306? ? ::ffff:192.168.4.30:60975? ESTABLISHED 3788/mysqld? ? ? ?
tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.4.10:3306? ? ::ffff:192.168.4.30:60977? ESTABLISHED 3788/mysqld? ? ? ?
tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.4.10:3306? ? ::ffff:192.168.4.20:33555? ESTABLISHED 3788/mysqld? ? ? ?
tcp? ? ? ? 0? ? ? 0 ::ffff:192.168.4.10:3306? ? ::ffff:192.168.4.30:60976? ESTABLISHED 3788/mysqld
并发访问量没超过指定的阀值,不区分读写操作,读写都交给负责读的服务器,一旦区分,以后都区分,直到连接数为0。
现在即使访问不同的服务器,客户端发觉不出服务端有什么变化,想要观察的话,可以在两个服务器的同一个表里存入不同的数据,然后在客户端开多个终端登录代理观察数据的变化,
四、扩展
MySQL代理与读(或写)服务器的集成
在许多企业应用中,MySQL数据库基本上都是读多写少,因此可以将mysql-proxy与Master或Slave安装到一起,从而减少一台服务器,节省成本。比如:
? ? Master+Proxy:192.168.4.10/24
? ? Slave:192.168.4.20/24
这种情况下,要避免mysql-proxy与MySQL服务程序的端口冲突,必要时可更改相关程序的监听地址、端口。
若要修改MySQL服务程序的监听地址、端口,可采用以下选项:
? ? --bind-address=:用来限定监听地址,比如可设为127.0.0.1
? ? --port=:用来改端口号,比如可改为33060
当然,最简单的方法还是直接将mysql-proxy改用其他端口。比如,在Master上部署mysql-proxy,启用时可监听192.168.4.10的33060端口:
? ? [root@proxy ~]# cd /usr/local/mysql-proxy/
? ? [root@proxy mysql-proxy]# bin/mysql-proxy -P 192.168.4.10:3333 \
? ? -b 192.168.4.10:3306 \
? ? -r 192.168.4.20:3306 \
? ? -s rw-splitting.lua &
这样,客户端只要访问192.168.4.10的3333端口,就可以读写数据库了。当服务器采用非标准的MySQL端口时,需要为mysql工具添加 -P 选项来指定端口号:
? [root@client ~]# mysql? -h 192.168.4.10? -uuser02 -P 3333 -ppwd123
? ? mysql>