面试题答案
一键面试考虑因素
- 日志位置一致性:确保主从节点使用相同位置的 binlog 进行恢复,否则可能导致从节点恢复的数据与主节点后续数据不一致。
- 执行顺序:binlog 中的事件顺序必须严格按照主节点生成时的顺序在从节点执行,避免因执行顺序错误造成数据不一致。
- 事务完整性:保证恢复过程中事务的原子性、一致性、隔离性和持久性,防止部分事务恢复不完整。
- 版本兼容性:主从节点的 MariaDB 版本需兼容,不同版本对 binlog 的格式和解析方式可能存在差异,导致恢复数据不一致。
- 并发操作影响:恢复过程中如果主节点有新的写入操作,可能会干扰从节点的恢复,需要协调好主从操作。
技术手段
- 基于 GTID(全局事务标识符):
- GTID 能唯一标识每个事务,在恢复时,从节点可以利用 GTID 准确找到需要恢复的事务,并按顺序应用。
- 主节点在写入 binlog 时,为每个事务分配一个 GTID。从节点通过设置
gtid_mode=ON
以及enforce_gtid_consistency=ON
来启用 GTID 模式,这样在恢复数据时,从节点可以根据 GTID 自动过滤和应用正确的 binlog 事件。
- 锁定主节点:
- 在从节点开始恢复数据前,对主节点执行
FLUSH TABLES WITH READ LOCK;
语句,这会阻止主节点的写入操作,保证 binlog 不再增加新的事务。 - 记录主节点当前的 binlog 文件名和位置(通过
SHOW MASTER STATUS;
获取),然后将相关 binlog 文件传输到从节点进行恢复。恢复完成后,在主节点执行UNLOCK TABLES;
解锁主节点,使其恢复正常写入。
- 在从节点开始恢复数据前,对主节点执行
- 使用复制过滤器:
- 在从节点设置复制过滤器,只让特定的数据库或表相关的 binlog 事件应用到从节点。例如,可以通过
CHANGE REPLICATION FILTER
语句设置replicate_do_db
或replicate_do_table
选项,只恢复指定数据库或表的数据,避免因不必要的 binlog 事件恢复导致数据不一致。
- 在从节点设置复制过滤器,只让特定的数据库或表相关的 binlog 事件应用到从节点。例如,可以通过
- 验证与校验:
- 恢复完成后,使用工具如
pt-table-checksum
(Percona Toolkit 中的工具)来验证主从节点数据的一致性。该工具通过计算表数据的校验和,对比主从节点上相同表的数据是否一致。如果发现不一致,可以进一步排查原因并进行修复。 - 也可以通过对比主从节点关键表的行数、数据摘要等方式来验证数据一致性。
- 恢复完成后,使用工具如