面试题答案
一键面试部分数据不一致
- 基于 binlog 重放
- 策略:找到主库中导致数据不一致的起始 binlog 位置,然后在备库上从该位置开始重放 binlog。可以通过对比主备库的数据,确定差异点,再利用
SHOW BINLOG EVENTS
等命令获取相关 binlog 信息,然后使用CHANGE MASTER TO
和START SLAVE
命令在备库上进行重放。 - 优点:操作相对简单,只针对差异部分进行同步,对系统整体影响较小,不会影响其他正常同步的数据。
- 缺点:需要准确找到导致数据不一致的 binlog 起始位置,定位过程可能比较复杂,若定位不准确可能导致同步错误。
- 策略:找到主库中导致数据不一致的起始 binlog 位置,然后在备库上从该位置开始重放 binlog。可以通过对比主备库的数据,确定差异点,再利用
- 使用 pt-table-sync 工具
- 策略:这是 Percona Toolkit 中的工具,它可以通过对比主备库指定表的数据,生成并执行同步语句。例如,
pt-table-sync --sync-to-master h=slave_host,u=user,p=password
,它会自动分析并同步数据差异。 - 优点:自动化程度高,能快速准确地发现并同步部分数据的差异,适用于不同版本的 MySQL,且对业务影响较小,可在业务运行时进行同步。
- 缺点:需要额外安装 Percona Toolkit,在数据量较大时,分析和同步的时间可能较长,可能会消耗较多的系统资源。
- 策略:这是 Percona Toolkit 中的工具,它可以通过对比主备库指定表的数据,生成并执行同步语句。例如,
大部分数据不一致
- 重新搭建备库
- 策略:停止备库复制,备份主库数据(可以使用
mysqldump
等工具),将备份文件传输到备库所在服务器,在备库上恢复数据,然后重新配置主从复制关系,使用CHANGE MASTER TO
等命令指定主库信息并启动复制。 - 优点:能确保备库数据与主库完全一致,操作相对简单直接,避免了复杂的差异分析和部分同步可能带来的隐患。
- 缺点:整个过程需要停止备库服务,对业务有一定影响,尤其是在备份和恢复数据时,可能会占用较多的磁盘空间和网络带宽,恢复时间较长,可能导致业务长时间无法使用备库。
- 策略:停止备库复制,备份主库数据(可以使用
- 使用 xtrabackup 工具进行增量备份恢复
- 策略:如果主库之前有使用 xtrabackup 进行全量备份,且备份期间有增量备份文件。在备库上先恢复全量备份,然后应用增量备份,最后重新配置主从复制。例如,先执行
innobackupex --apply-log --redo-only /path/to/full_backup
,再依次对增量备份执行innobackupex --apply-log --redo-only /path/to/full_backup --incremental-dir=/path/to/incremental_backup1
等,最后innobackupex --copy-back /path/to/full_backup
并配置主从复制。 - 优点:相比于重新搭建备库,增量恢复可以减少数据传输量和恢复时间,对业务影响相对较小,尤其适用于数据量非常大且有定期增量备份的场景。
- 缺点:依赖于之前的全量和增量备份,若备份不完整或出现问题,可能导致恢复失败。配置和操作相对复杂,需要对 xtrabackup 工具的使用有深入了解,且在恢复过程中可能会出现一些与备份版本、MySQL 版本兼容性相关的问题。
- 策略:如果主库之前有使用 xtrabackup 进行全量备份,且备份期间有增量备份文件。在备库上先恢复全量备份,然后应用增量备份,最后重新配置主从复制。例如,先执行