面试题答案
一键面试常见问题
- 主从数据不一致
- 原因:网络延迟、复制线程异常、主库故障恢复后数据未同步等。例如主库在高并发写入时,从库可能因为网络不稳定无法及时获取二进制日志并应用,导致主从数据差异。
- 影响:业务系统读取从库数据时可能获取到旧数据,影响业务逻辑,如电商库存显示不准确等。
- 复制延迟
- 原因:从库硬件性能不足(如 CPU、磁盘 I/O 瓶颈)、主库负载过高产生大量二进制日志、复杂查询导致从库应用日志慢等。例如从库磁盘写入速度慢,不能及时将接收到的日志写入中继日志并应用。
- 影响:数据不能及时在从库反映,实时性要求高的业务(如实时监控)无法从从库获取最新数据。
- 数据丢失
- 原因:主库崩溃且二进制日志未完全同步到从库,或者在半同步复制环境下,部分确认机制未正确设置。例如主库崩溃时,一些已提交事务的二进制日志还在内存中未刷盘,且此时从库未收到这些日志。
- 影响:业务数据永久性丢失,影响业务完整性,如订单数据丢失。
排查方法
- 主从数据不一致排查
- 对比工具:使用
pt - table - checksum
工具,它会在主库和从库上分别计算表的校验和,然后对比是否一致。如果不一致,可进一步使用pt - table - sync
工具进行修复。 - 手工对比:对于关键表,可在主从库分别执行
SELECT COUNT(*)
查看记录数是否一致,再通过SELECT * FROM table WHERE primary_key = 'xxx'
等方式对比特定记录。
- 对比工具:使用
- 复制延迟排查
- SHOW STATUS 命令:在从库执行
SHOW STATUS LIKE 'Seconds_Behind_Master'
,该值表示从库落后主库的秒数。若数值较大,说明存在延迟。 - 分析从库性能:通过系统工具(如
top
查看 CPU 使用率、iostat
查看磁盘 I/O 等)确定从库硬件是否存在瓶颈。同时查看从库SHOW PROCESSLIST
,检查是否有长时间运行的查询导致应用日志延迟。 - 主库负载分析:在主库执行
SHOW GLOBAL STATUS LIKE 'Threads_running'
等命令查看主库负载情况,若主库负载过高,产生大量二进制日志,也可能导致从库延迟。
- SHOW STATUS 命令:在从库执行
- 数据丢失排查
- 二进制日志分析:在主库查看二进制日志文件,确定崩溃前已提交事务的日志记录是否完整。使用
mysqlbinlog
工具查看二进制日志内容。 - 半同步复制检查:在主从库查看
rpl_semi_sync_master_enabled
和rpl_semi_sync_slave_enabled
变量是否正确设置,以及rpl_semi_sync_master_wait_no_slave
等相关参数是否合理,确保半同步复制机制正常工作。
- 二进制日志分析:在主库查看二进制日志文件,确定崩溃前已提交事务的日志记录是否完整。使用