MST

星途 面试题库

面试题:MariaDB主库数据复杂场景下复制配置的异常处理

假设MariaDB主库存在数据分区、存储过程以及触发器等复杂结构,在进行复制配置过程中遇到主从数据不一致的异常,你将如何排查并解决?
24.4万 热度难度
数据库MariaDB

知识考点

AI 面试

面试题答案

一键面试

排查步骤

  1. 确认复制状态
    • 在从库上使用 SHOW SLAVE STATUS \G 命令,查看 Slave_IO_RunningSlave_SQL_Running 字段是否都为 Yes。如果 Slave_IO_RunningNo,检查主从网络连接、主库配置等;如果 Slave_SQL_RunningNo,查看 Last_Error 字段获取具体错误信息。
  2. 检查数据分区
    • 确认主从库上的数据分区定义是否一致。可以通过查看主从库上相关表的 CREATE TABLE 语句,对比分区的规则、范围等。如果不一致,需在从库上调整分区定义使其与主库一致。
    • 检查数据在分区中的分布情况。可以在主从库上分别执行查询,验证相同数据是否分布在相同的分区中。如果数据分布异常,可能需要重新调整数据分布。
  3. 检查存储过程
    • 确保主从库上的存储过程定义完全相同。通过 SHOW CREATE PROCEDURE 命令查看主从库上存储过程的创建语句,对比是否有差异。如果有差异,需在从库上重新创建正确的存储过程。
    • 查看存储过程执行过程中是否有对数据进行特殊处理,导致主从数据不一致。可以在主库上模拟存储过程执行,观察数据变化,然后对比从库上的数据。
  4. 检查触发器
    • 确认主从库上触发器的定义一致。使用 SHOW CREATE TRIGGER 命令查看主从库上触发器的创建语句进行对比。若不一致,在从库上重新创建正确的触发器。
    • 分析触发器触发的条件和操作,看是否会导致主从数据不一致。例如,触发器可能在主库上成功执行,但在从库上因某些原因(如权限、数据状态等)执行失败。
  5. 检查二进制日志
    • 在主库上使用 SHOW BINARY LOGS 查看二进制日志文件列表,确认从库是否能够正确获取到主库的二进制日志。
    • 查看主库上的二进制日志内容,使用 SHOW BINLOG EVENTS IN 'log_name' 命令(log_name 为具体的二进制日志文件名),分析主库上的数据变更记录是否正确传输到从库。
  6. 检查主从配置参数
    • 对比主从库的配置文件,确保关键参数(如 server_idlog-binrelay-log 等)配置正确且无冲突。server_id 在主从库集群中必须唯一。
    • 检查主库的 binlog_format 参数,确保其设置不会导致复制问题。例如,STATEMENT 格式在某些复杂操作下可能导致主从数据不一致,可尝试改为 ROW 格式。

解决方法

  1. 修复数据
    • 如果发现主从数据差异是由于部分数据未同步导致,可以使用 INSERT INTO...SELECT 语句,从主库上查询并插入缺失的数据到从库。
    • 如果数据不一致是由于数据错误修改,可以根据主库上正确的数据,在从库上执行 UPDATEDELETE 等语句修复数据。
  2. 重新配置复制
    • 如果排查出是复制配置错误,可先停止从库复制,使用 STOP SLAVE 命令。
    • 然后在从库上重新配置主库连接信息,使用 CHANGE MASTER TO 命令,指定正确的主库 hostportuserpassword 以及二进制日志文件名和位置等参数。
    • 最后启动从库复制,执行 START SLAVE 命令。
  3. 处理存储过程和触发器差异
    • 对于存储过程和触发器的差异,在从库上删除不正确的存储过程和触发器,然后从主库导出正确的创建语句,在从库上重新创建。
    • 确保在重新创建过程中,相关的权限设置正确,避免因权限问题导致后续执行异常。
  4. 数据一致性校验工具
    • 可以使用一些数据一致性校验工具,如 pt-table-checksum 等,全面检查主从库之间的数据一致性情况,并根据工具提示进行修复。