MariaDB Proxy读写分离的实现
MySQL Master端
在MySQL Master端(172.16.251.69)授权
#mysql
mysql> GRANT ALL ON*.* TO 'admin'@'172.16.%.%' IDENTIFIED BY 'admin';
mysql> FLUSHPRIVILEGES;
MySQL Slave端
在MySQL Slave端的数据库上查看是否有授权的用户
测试
下面的操作均在Maridb Proxy(172.16.251.70)上执行
管理功能测试
此时,若我们还试图以传统的方式连接Mysql的话,很显然是会失败的,如下:
# mysql
ERROR 2002(HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'(2 "No such file or directory")
正确的方式:
[root@station150 ~]#mysql-uadmin -padmin -h172.16.251.70 --port=4041
Welcome to theMariaDB monitor.Commands end with ; or\g.
Your MySQLconnection id is 1
Server version:5.0.99-agent-admin
MySQL [(none)]> SELECT* FROM HELP;
MySQL [(none)]>SELECT * FROM backends;
+-------------+--------------------+---------+------+------+-------------------+
| backend_ndx |address| state| type | uuid | connected_clients |
+-------------+--------------------+---------+------+------+-------------------+
|1 | 172.16.251.69:3306 | unknown |rw| NULL |0 |
|2 | 172.16.251.68:3306 | unknown |ro| NULL |0 |
+-------------+--------------------+---------+------+------+-------------------+
2 rows in set (0.01sec)
读写分离测试
通过MariadbProxy(172.16.251.70)访问Master MySQL(172.16.251.69)的数据库
# mysql -uadmin-padmin -h172.16.251.70 [--port=3306]
(1)测试写操作
# mysql -uadmin -padmin-h172.16.251.70
然后分别去Master端和Slave端,验证是否能看通过Mariadb Proxy新建的mydb1数据库
通过Mariadb Proxy删除hellodb数据库及其中的数据,并验证
MariaDB Proxy 70
执行批量导入数据的操作:
验证读写分离的最好办法是:分别在Master(可读写),Slave(只读)上使用tcpdump抓包工具,看可以捕捉到哪种操作的数据报文
测试读操作
在Master上捕获到的和读写操作相关的报文
由于在Master上可以进行读写操作,所以当读(查询)操作较少的时候,基本上Master自身就处理了,
所以想要验证效果就必须批量导入数据或执行查询操作。
在MariadbProxy(70)执行批量读操作
# for i in `seq10`;do mysql -uadmin -padmin -h172.16.251.70 -e "select * fromhellodb.classes where ClassID=$i";done
下面是批量执行读操作时,在Slave上捕获到的和读写操作相关的报文
朋友,还记得之前在MariaDBProxy上执行SELECT * FROM backends;时state栏的状态信息吗?
刚开执行读写操作的时候,只有Master(172.16.251.69)的state是up状态,而在我批量执行读操作之后,
现在Slave(172.16.251.68)的state也变成了up状态,表示Slave端已接受到了读请求