You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB服务器宕机后无法重新加入为从节点的问题求助

MariaDB故障转移后GTID不兼容导致节点无法重连的问题分析与解决

问题原因

  • GTID域不匹配:原主节点server2的server_id=1,所有节点GTID为0-1-853336(格式为domain-server_id-sequence);server3成为新主后,其server_id=200,生成了以自己server_id为标识的GTID0-200-3,而server1/2的GTID仍停留在旧主的0-1-853336,两者GTID域无交集,被判定为不兼容。
  • 新主生成独立GTID事件:server3升主后,哪怕是系统级的写操作(如元数据变更)都会生成新的GTID序列,导致其gtid_binlog_pos与旧节点的gtid_current_pos完全脱节,触发自动重连/手动重连的兼容性校验失败。

解决方法

方法一:重置GTID后重新同步(适用于无数据冲突场景)

  1. 在server1和server2上执行以下SQL:
    -- 停止复制进程
    STOP SLAVE;
    -- 重置本地GTID历史与binlog
    RESET MASTER;
    -- 设置新主节点并启动复制,MASTER_USE_GTID=slave_pos表示从新主的当前GTID位置开始同步
    CHANGE MASTER TO
      MASTER_HOST='server3',
      MASTER_USER='your_repl_user',
      MASTER_PASSWORD='your_repl_pass',
      MASTER_USE_GTID=slave_pos;
    START SLAVE;
    
  2. 用MaxCtrl将节点重新加入监控:
    maxctrl call command mariadbmon rejoin DatabaseMonitor server1
    maxctrl call command mariadbmon rejoin DatabaseMonitor server2
    

方法二:手动合并GTID域(适用于需要保留旧数据的场景)

  1. 先确认server3未生成旧主GTID域(0-1)的事件:
    -- 在server3上查看binlog事件,跳过前3个格式描述事件
    SHOW BINLOG EVENTS IN 'mysql-bin.000001' FROM 4;
    
  2. 在server1和server2上临时开启GTID去重,避免冲突报错:
    SET GLOBAL gtid_ignore_duplicates=ON;
    
  3. 设置新主并启动复制,让节点自动合并GTID:
    CHANGE MASTER TO
      MASTER_HOST='server3',
      MASTER_USER='your_repl_user',
      MASTER_PASSWORD='your_repl_pass',
      MASTER_USE_GTID=current_pos;
    START SLAVE;
    
  4. 复制正常启动后,关闭GTID去重:
    SET GLOBAL gtid_ignore_duplicates=OFF;
    
  5. 执行MaxCtrl命令重新加入监控(同方法一)

注意事项

  • 故障转移后需确认新主未产生与旧节点冲突的写操作,否则可能导致数据不一致。
  • auto_rejoin=true仅在节点GTID与新主兼容时生效,跨server_id的GTID域变更会触发兼容性校验失败。
  • 建议提前规划集群内所有节点的server_id,避免故障转移后出现GTID域冲突。

内容的提问来源于stack exchange,提问作者Nandni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:09:22