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

双节点Galera Cluster下node1节点MySQL服务无法重启问题咨询

Galera集群单节点故障恢复解答

前置检查操作

先在正常运行的node2节点执行以下操作确认集群状态:

  • 登录数据库执行SHOW STATUS LIKE 'wsrep_%';,确认以下参数值:
    • wsrep_cluster_size为1
    • wsrep_local_state_comment为Synced
    • 记录wsrep_sst_method的配置值
  • 提前对node2执行全量备份,执行mysqldump -u root -p --all-databases --single-transaction > /opt/full_backup.sql,作为故障兜底

问题1:清空node1 datadir重启是否影响node2

该操作不会影响node2的正常业务运行,具体操作逻辑及步骤如下:

  • 核心原理:清空datadir后的节点重启后会自动识别本地无有效集群数据,主动向当前存活的node2发起全量SST(状态快照传输)请求,SST过程中node2作为数据捐赠方,仅对外提供数据拉取服务,默认不会中断业务:
    • 若wsrep_sst_method为xtrabackup/mariabackup:同步全程不影响node2的读写业务
    • 若wsrep_sst_method为rsync:同步期间node2会进入只读状态,业务写入会短暂阻塞,同步完成后自动恢复
  • 操作步骤:
    1. 停止node1的mariadb服务:systemctl stop mariadb
    2. 备份node1原有datadir(默认路径为/var/lib/mysql)后,清空该目录下的所有文件,保留目录本身并修正权限:chown -R mysql:mysql /var/lib/mysql
    3. 启动node1的mariadb服务:systemctl start mariadb
    4. 可通过journalctl -u mariadb -f观察同步日志,待同步完成后登录node1执行SHOW STATUS LIKE 'wsrep_local_state_comment';,返回Synced即恢复完成

注:当前仅node2为存活节点,node1重启后不会触发脑裂,不存在双主冲突风险


问题2:是否需要手动同步系统权限表

不需要手动导入mysql.user表,具体说明如下:

  • 你当前清空datadir后走的是全量SST流程,无论配置的是哪种SST方法,都会把node2的整个datadir(包括mysql系统库下的所有表、权限数据)全量拷贝到node1,同步完成后两个节点的用户、权限配置完全一致
  • 只有当你使用innodb_force_recovery参数修复node1本地数据,走IST增量同步的场景下,才需要检查MyISAM引擎的系统表是否有未同步的变更,手动同步数据

额外优化建议

双节点Galera集群天生存在脑裂风险,建议后续新增一个轻量仲裁节点garbd,仅需占用极低的CPU、内存资源,即可将集群节点数提升至3个,从集群机制层面避免脑裂问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:24:03