MySQL测试框架MTR(MySQL Test Run)是MySQL官方推出的自动化测试工具,主要用于验证MySQL服务器的功能正确性和稳定性,在数据库高可用性保障体系中占据重要地位。它内置了丰富的测试用例,同时支持用户自定义测试逻辑,能够覆盖从基础SQL执行到复杂集群场景的全链路验证。

MTR的核心功能特性
MTR的核心能力围绕测试全生命周期展开,这些特性让它能够有效支撑高可用性相关的验证工作:
- 用例灵活编写:支持SQL语句、shell命令、Perl脚本等多种编写方式,可模拟各类业务场景和异常场景。
- 自动化执行与校验:自动执行测试用例,对比预期结果和实际输出,自动标记失败用例,减少人工介入成本。
- 环境隔离能力:每个测试用例可以独立启动MySQL实例,避免测试之间的环境干扰,保证结果准确性。
- 集群场景支持:原生支持主从复制、组复制等集群架构的测试,可直接验证高可用集群的相关功能。
MTR基础使用流程
1. 测试用例基本结构
一个标准的MTR测试用例包含测试逻辑文件和结果文件两部分,测试逻辑文件以.test为后缀,结果文件以.result为后缀。以下是一个简单的测试用例如下:
-- 测试用例:验证基础查询功能 --source include/have_binlog_format_row.inc connect (conn1, localhost, root,,); CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(20)); INSERT INTO test_table VALUES (1, 'test'); SELECT * FROM test_table; DROP TABLE test_table; disconnect conn1;
2. 执行测试用例
在MySQL源码目录的mysql-test路径下,执行以下命令即可运行单个测试用例:
# 执行指定测试用例 ./mtr --force --retry=0 test_case_name.test
如果需要批量执行某个目录下的所有用例,可以直接指定目录路径:
# 批量执行指定目录下的用例 ./mtr --force --retry=0 suite/high_availability/
MTR在高可用性保障中的应用场景
主从复制故障验证
高可用架构中主从复制的稳定性至关重要,MTR可以模拟主库宕机、从库延迟、网络中断等场景,验证复制链路的自愈能力和数据一致性。以下用例模拟主库写入后从库同步的场景:
-- 测试用例:验证主从复制数据同步
--source include/master-slave.inc
connection master;
CREATE TABLE repl_test (id INT, content VARCHAR(50));
INSERT INTO repl_test VALUES (1, 'replication_test');
-- 等待从库同步完成
--source include/rpl_wait.inc
connection slave;
SELECT * FROM repl_test;
-- 验证数据是否同步成功
let $count = query_get_value(SELECT COUNT(*) FROM repl_test, COUNT(*), 1);
if ($count != 1) {
die "主从复制数据同步失败";
}
故障切换场景测试
对于使用MGR(MySQL Group Replication)或者第三方高可用组件的场景,MTR可以模拟节点故障,验证集群的自动切换逻辑是否正常,数据是否存在丢失。以下用例模拟MGR集群节点离线的场景:
-- 测试用例:验证MGR节点故障后集群可用性 --source include/gr_cluster.inc connection node1; -- 查看当前集群成员 SELECT MEMBER_HOST, MEMBER_STATE FROM performance_schema.replication_group_members; -- 模拟node2节点故障 connection node2; -- 执行关闭实例的命令 shutdown; -- 等待集群状态更新 --source include/gr_wait.inc connection node1; -- 验证剩余节点仍可正常写入 CREATE TABLE gr_test (id INT); INSERT INTO gr_test VALUES (1); SELECT * FROM gr_test;
异常场景压测
MTR可以结合循环逻辑模拟高并发、资源不足的异常场景,验证数据库在高负载下的稳定性。以下用例模拟并发写入场景:
-- 测试用例:验证高并发写入下的数据一致性
connect (conn1, localhost, root,,);
connect (conn2, localhost, root,,);
connection conn1;
CREATE TABLE concurrent_test (id INT PRIMARY KEY, val INT);
-- 两个连接并发插入数据
connection conn1;
let $i=0;
while ($i < 100) {
INSERT INTO concurrent_test VALUES ($i, $i*2);
inc $i;
}
connection conn2;
let $i=100;
while ($i < 200) {
INSERT INTO concurrent_test VALUES ($i, $i*2);
inc $i;
}
-- 验证总数据量是否为200
connection conn1;
let $total = query_get_value(SELECT COUNT(*) FROM concurrent_test, COUNT(*), 1);
if ($total != 200) {
die "并发写入数据不一致,实际数量: $total";
}
MTR使用注意事项
在使用MTR进行高可用性相关测试时,需要注意以下几点:
- 测试前确保环境干净,避免残留的实例或者数据影响测试结果。
- 自定义用例时尽量复用官方提供的公共include文件,减少重复逻辑编写。
- 对于复杂的集群场景,提前规划好测试用例的执行顺序,避免场景之间的依赖导致结果异常。
- 测试完成后及时清理生成的临时实例和数据,释放系统资源。
通过合理运用MTR测试框架,可以在数据库上线前充分验证高可用方案的有效性,提前发现潜在的稳定性问题,大幅降低线上故障的发生概率,是保障数据库服务可靠性的重要工具。
MySQLMySQL_Test_RunMTR数据库高可用性修改时间:2026-07-19 09:24:33