# 登录管理接口[root@localhost ~]# mysql -u admin -padmin -h 127.0.0.1 -P 6032# 添加主库(写节点)
ProxySQL> INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (10, '192.168.1.100', 3306);# 添加从库(读节点)
ProxySQL> INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (20, '192.168.1.101', 3306);
ProxySQL> INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (20, '192.168.1.102', 3306);# 保存配置
ProxySQL> LOAD MYSQL SERVERS TO RUNTIME;
ProxySQL> SAVE MYSQL SERVERS TO DISK;
3. 配置用户认证
# 添加应用用户
ProxySQL> INSERT INTO mysql_users(username, password, default_hostgroup)
VALUES ('app_user', 'AppPass123!', 10);# 保存配置
ProxySQL> LOAD MYSQL USERS TO RUNTIME;
ProxySQL> SAVE MYSQL USERS TO DISK;
4. 配置路由规则
# 写操作路由(主库)
ProxySQL> INSERT INTO mysql_query_rules(rule_id, active, match_pattern, destination_hostgroup, apply)
VALUES (1, 1, '^INSERT', 10, 1),
(2, 1, '^UPDATE', 10, 1),
(3, 1, '^DELETE', 10, 1);# 读操作路由(从库)
ProxySQL> INSERT INTO mysql_query_rules(rule_id, active, match_pattern, destination_hostgroup, apply)
VALUES (4, 1, '^SELECT', 20, 1);# 保存配置
ProxySQL> LOAD MYSQL QUERY RULES TO RUNTIME;
ProxySQL> SAVE MYSQL QUERY RULES TO DISK;
5. 测试读写分离
# 通过ProxySQL连接[root@localhost ~]# mysql -u app_user -pAppPass123! -h 127.0.0.1 -P 6033# 执行写操作
mysql> INSERT INTO test.tb1 VALUES (1); -- 路由到主库
# 执行读操作
mysql> SELECT * FROM test.tb1; -- 路由到从库
# 连接实例1[root@localhost ~]# mysql -S /mysql/3307/mysql.sock -e "SHOW VARIABLES LIKE 'port'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port |3307|
+---------------+-------+
# 连接实例2[root@localhost ~]# mysql -S /mysql/3308/mysql.sock -e "SHOW VARIABLES LIKE 'port'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port |3308|
+---------------+-------+
三、多实例读写分离整合
1. 配置主从复制
# 在3307实例执行
mysql> CREATE USER'repl'@'%' IDENTIFIED BY 'ReplPass123!';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';# 在3308实例执行
mysql> CHANGE MASTER TO
MASTER_HOST='127.0.0.1',
MASTER_PORT=3307,
MASTER_USER='repl',
MASTER_PASSWORD='ReplPass123!';
mysql> START SLAVE;
2. 配置ProxySQL
# 添加多实例到ProxySQL
ProxySQL> INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES
(10, '127.0.0.1', 3307), # 主库(20, '127.0.0.1', 3308);# 从库# 重载配置
ProxySQL> LOAD MYSQL SERVERS TO RUNTIME;
ProxySQL> SAVE MYSQL SERVERS TO DISK;
3. 测试多实例读写分离
# 通过ProxySQL写入
mysql> INSERT INTO test.tb1 VALUES (2);# 写入3307# 通过ProxySQL读取
mysql> SELECT * FROM test.tb1;# 从3308读取