暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

MySQL ProxySQL读写分离验证

原创 飞天 2025-11-07
297

背景说明

应用程序使用 MySQL 作为后端数据库,同时使用了 MySQL ProxySQL 读写分离中间件将读写负载分散到不同的数据库节点。在MySQL数据库从 8.0.36 版本升级到 8.0.44 版本后,需要验证数据库读写分离是否正常。本文给出了验证方案,供参考。

验证步骤

1. 环境状态检查

连接到ProxySQL管理界面:

mysql -h 127.0.0.1 -P 6032 -uadmin -padmin

1.1 ProxySQL后端服务器状态

SELECT * FROM mysql_servers; SELECT hostgroup_id, hostname, port, status, weight FROM runtime_mysql_servers;

确保所有后端MySQL 8.0.44实例状态均为ONLINE

1.2 查询规则状态检查

-- 检查读写分离规则 SELECT rule_id, active, match_digest, match_pattern, destination_hostgroup, apply FROM mysql_query_rules WHERE active = 1 ORDER BY rule_id; -- 检查运行时规则状态 SELECT * FROM runtime_mysql_query_rules;

2. 读写分离功能验证

2.1 写操作验证

-- 通过ProxySQL执行写操作测试,连接到ProxySQL的6033端口(默认读写端口) mysql -h 127.0.0.1 -P 6033 -uadmin -padmin CREATE DATABASE IF NOT EXISTS proxy_test; USE proxy_test; CREATE TABLE IF NOT EXISTS rw_test ( id INT AUTO_INCREMENT PRIMARY KEY, data VARCHAR(100), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, source_host VARCHAR(100) ); -- 插入测试数据 INSERT INTO rw_test (data, source_host) VALUES ('write_test1', @@hostname); INSERT INTO rw_test (data, source_host) VALUES ('write_test2', @@hostname); UPDATE rw_test SET data = 'updated' WHERE id = 1; DELETE FROM rw_test WHERE id = 2;

2.2 读操作验证

-- 执行读操作,验证是否路由到从库 SELECT * FROM rw_test; SELECT @@hostname as current_host, @@port as current_port; SELECT COUNT(*) FROM rw_test; -- 多次执行以下查询,观察是否在不同从库间负载均衡 SELECT @@server_id, @@hostname, @@port, 'read_query' as query_type;

2.3 事务内读写验证

-- 测试事务中的读写行为 START TRANSACTION; INSERT INTO rw_test (data, source_host) VALUES ('transaction_test', @@hostname); SELECT * FROM rw_test WHERE data = 'transaction_test'; COMMIT;

3. 路由规则精确验证

3.1 基于正则表达式的路由测试

根据具体规则,针对性测试:

-- 测试SELECT语句路由(应该到读组) SELECT * FROM rw_test WHERE id = 1; SELECT COUNT(*) as cnt FROM rw_test; -- 测试INSERT/UPDATE/DELETE路由(应该到写组) INSERT INTO rw_test (data) VALUES ('pattern_test'); UPDATE rw_test SET data = 'updated_pattern' WHERE id = 1; DELETE FROM rw_test WHERE id > 100; -- 测试特定表名模式的路由 SELECT * FROM large_table WHERE condition = 'value'; INSERT INTO log_table (message) VALUES ('test message');

3.2 存储过程/函数调用测试

-- 测试存储过程执行路由 CALL test_procedure(); SELECT test_function();

4. 监控和统计信息分析

4.1 ProxySQL统计信息查询

-- 查看查询路由统计 SELECT hostgroup, count_star, sum_time, sum_rows_affected, sum_rows_sent FROM stats_mysql_query_digest ORDER BY count_star DESC LIMIT 20; -- 查看各主机组的查询分布 SELECT hostgroup, SUM(count_star) as total_queries, SUM(sum_time) as total_time FROM stats_mysql_query_digest GROUP BY hostgroup; -- 重置统计以便后续观察 SELECT * FROM stats_mysql_query_digest_reset;

4.2 连接池状态监控

-- 检查各后端连接状态 SELECT hostgroup, srv_host, srv_port, status, ConnUsed, ConnFree, ConnOK, ConnERR FROM stats_mysql_connection_pool;

5. 性能和数据一致性验证

5.1 复制延迟检查

-- 在每个从库上检查复制状态 SHOW SLAVE STATUS\G -- 关注 Seconds_Behind_Master 参数 -- 或者在主库检查 SELECT * FROM performance_schema.replication_group_members;

5.2 数据一致性验证

-- 在主库和从库分别验证数据一致性 -- 在主库执行 SELECT @@hostname, COUNT(*) FROM rw_test; -- 在从库执行 SELECT @@hostname, COUNT(*) FROM rw_test;

验证关键点

  1. 路由准确性:各类型查询是否正确路由到预期主机组
  2. 规则有效性:所有正则表达式规则是否按预期工作
  3. 数据一致性:主从数据同步是否正常

通过以上系统性的验证,可以全面确保MySQL 8.0.44升级后ProxySQL读写分离功能完全正常。

关于作者

网名:飞天,墨天轮2024年度优秀原创作者,拥有 Oracle 10g OCM 认证、PGCE认证、MySQL 8.0 OCP认证以及OBCA、KCP、KCSM、ACP、YCP、磐维等众多国产数据库认证证书,目前从事Oracle、Mysql、PostgresSQL、磐维数据库管理运维工作,喜欢结交更多志同道合的朋友,热衷于研究、分享数据库技术。
微信公众号:飞天online
墨天轮:https://www.modb.pro/u/15197
如有任何疑问,欢迎大家留言,共同探讨~~~

最后修改时间:2025-11-07 15:33:45
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论