面试题答案
一键面试排查步骤
- 确认复制状态:
- 在从库上使用
SHOW SLAVE STATUS \G
命令,查看Slave_IO_Running
和Slave_SQL_Running
字段是否都为Yes
。如果Slave_IO_Running
为No
,检查主从网络连接、主库配置等;如果Slave_SQL_Running
为No
,查看Last_Error
字段获取具体错误信息。
- 在从库上使用
- 检查数据分区:
- 确认主从库上的数据分区定义是否一致。可以通过查看主从库上相关表的
CREATE TABLE
语句,对比分区的规则、范围等。如果不一致,需在从库上调整分区定义使其与主库一致。 - 检查数据在分区中的分布情况。可以在主从库上分别执行查询,验证相同数据是否分布在相同的分区中。如果数据分布异常,可能需要重新调整数据分布。
- 确认主从库上的数据分区定义是否一致。可以通过查看主从库上相关表的
- 检查存储过程:
- 确保主从库上的存储过程定义完全相同。通过
SHOW CREATE PROCEDURE
命令查看主从库上存储过程的创建语句,对比是否有差异。如果有差异,需在从库上重新创建正确的存储过程。 - 查看存储过程执行过程中是否有对数据进行特殊处理,导致主从数据不一致。可以在主库上模拟存储过程执行,观察数据变化,然后对比从库上的数据。
- 确保主从库上的存储过程定义完全相同。通过
- 检查触发器:
- 确认主从库上触发器的定义一致。使用
SHOW CREATE TRIGGER
命令查看主从库上触发器的创建语句进行对比。若不一致,在从库上重新创建正确的触发器。 - 分析触发器触发的条件和操作,看是否会导致主从数据不一致。例如,触发器可能在主库上成功执行,但在从库上因某些原因(如权限、数据状态等)执行失败。
- 确认主从库上触发器的定义一致。使用
- 检查二进制日志:
- 在主库上使用
SHOW BINARY LOGS
查看二进制日志文件列表,确认从库是否能够正确获取到主库的二进制日志。 - 查看主库上的二进制日志内容,使用
SHOW BINLOG EVENTS IN 'log_name'
命令(log_name
为具体的二进制日志文件名),分析主库上的数据变更记录是否正确传输到从库。
- 在主库上使用
- 检查主从配置参数:
- 对比主从库的配置文件,确保关键参数(如
server_id
、log-bin
、relay-log
等)配置正确且无冲突。server_id
在主从库集群中必须唯一。 - 检查主库的
binlog_format
参数,确保其设置不会导致复制问题。例如,STATEMENT
格式在某些复杂操作下可能导致主从数据不一致,可尝试改为ROW
格式。
- 对比主从库的配置文件,确保关键参数(如
解决方法
- 修复数据:
- 如果发现主从数据差异是由于部分数据未同步导致,可以使用
INSERT INTO...SELECT
语句,从主库上查询并插入缺失的数据到从库。 - 如果数据不一致是由于数据错误修改,可以根据主库上正确的数据,在从库上执行
UPDATE
或DELETE
等语句修复数据。
- 如果发现主从数据差异是由于部分数据未同步导致,可以使用
- 重新配置复制:
- 如果排查出是复制配置错误,可先停止从库复制,使用
STOP SLAVE
命令。 - 然后在从库上重新配置主库连接信息,使用
CHANGE MASTER TO
命令,指定正确的主库host
、port
、user
、password
以及二进制日志文件名和位置等参数。 - 最后启动从库复制,执行
START SLAVE
命令。
- 如果排查出是复制配置错误,可先停止从库复制,使用
- 处理存储过程和触发器差异:
- 对于存储过程和触发器的差异,在从库上删除不正确的存储过程和触发器,然后从主库导出正确的创建语句,在从库上重新创建。
- 确保在重新创建过程中,相关的权限设置正确,避免因权限问题导致后续执行异常。
- 数据一致性校验工具:
- 可以使用一些数据一致性校验工具,如
pt-table-checksum
等,全面检查主从库之间的数据一致性情况,并根据工具提示进行修复。
- 可以使用一些数据一致性校验工具,如