Open ghost opened 3 years ago
https://dev.mysql.com/doc/dev/mysql-server/latest/PAGE_MYSQL_TEST_RUN.html
cd .../mysql-test/
目录结构
执行测试
./mysql-test-run.pl rpl_binlog_transaction_dependency_history_size # single test
./mysql-test-run.pl --suite=rpl # a suite
# 注释
# 普通sql语句.
INSERT INTO t1 VALUES (null); # 1 2
# mysqltest指令, 使用双横杠开头.
--source include/master-slave.inc
--connection slave
# mysqltest指令, 也可以不使用双横杠开头. 可能是老式用法.
# 根据规范, mysqltest指令不会和普通sql语句冲突.
connection master;
常用mysqltest指令
和Writeset MTS有关的test, 一部分在 WL#9556 中添加. 另一部分是原有的mts_logical_clock test (回放端).
rpl_binlog_transaction_dependency_tracking.test
test目标: 测试writeset dependency_tracking是否生成了正确的依赖关系.
rpl_binlog_transaction_dependency_history_size.test
test目标: 测试可调参数 binlog_transaction_dependency_history_size 行为是否正常.
内容:
1: 在 rpl_binlog_transaction_dependency_history_size-master.opt
中设置一个较小的history_size
--binlog_transaction_dependency_tracking=COMMIT_ORDER
--transaction_write_set_extraction=XXHASH64
--binlog_transaction_dependency_history_size=3
2: 和上述测试一样, 调用 assert_logical_timestamps.inc
进行比较.
移植方案: dtle中对应的参数为DependencyHistorySize
, 我们还是通过日志输出来验证正确性.
1: Add transactions with different dependency tracking and empty transaction on master.
验证这些场景下master mysqld生成binlog中的TX last_commit.
2: Test timestamps order with filtered and non-filtered transactions on Slave.
2.1: (我们不用COMMIT_ORDER, 略)
2.2: WRITESET with SLAVE
2.3: (我们不用WRITESET_SESSION, 略)
注: include/sync_slave_sql_with_master.inc:
Must be called on the master. Will change connection to the slave.
Verify that logical timestamps are generated correctly for all types of indexes when binlog_transaction_dependency_tracking=WRITESET.
P1: 如果一个TX涉及无PK表, 它必须
如果这个TX同时还涉及有PK表, 需要更新history
P2: 一个TX只涉及有PK表, 需要根据writeset来计算依赖
P3: NOT NULL UNIQUE index 等同于PK
P4: 如果同时有PK和其他keys, 其他keys产生的uniqueness也会产生依赖
P5: 如果同时有PK和可空列, 同一列中的空值不会冲突(我的理解: 特指UK中的NULL不会互相依赖)
对于一张有3个列(a,b,c)的表, 验证不同key的组合下, 同一系列DML TX的依赖关系. A. column a上有/无PK B. b和c上有/无 NotNull constraints C. b和c上有/无 UK constraints D. b和c上都没有index / b上有index / c上有index (Skip the no-index case if uniqueness constraints are required).
key组合数量: 2x2x(2x3-1) = 20
binlog_reset_connection_not_reset_writeset.test # 和 tracking=writeset_session 有关. 我们不是session.
binlog_transaction_dependency_tracking_on_start.test # 只和 mysql 配置有关
binlog_transaction_dependency_tracking_sensitive.test # 被后续commit删除
rpl_binlog_transaction_dependency_tracking_with_fk.test # foreign key在实践中基本不用
rpl_binlog_transaction_dependency_tracking_with_invisible_columns.test # invisible_columns 是 8.0.23引入的新功能
1 获取 mysql-test
https://dev.mysql.com/downloads/mysql/
下载下述两个压缩包(或其他版本)
两个压缩包将解压到同一目录
mysql-8.0.26-linux-glibc2.12-x86_64
中