双节点Galera Cluster下node1节点MySQL服务无法重启问题咨询
Galera集群单节点故障恢复解答
前置检查操作
先在正常运行的node2节点执行以下操作确认集群状态:
- 登录数据库执行
SHOW STATUS LIKE 'wsrep_%';,确认以下参数值:wsrep_cluster_size为1wsrep_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会进入只读状态,业务写入会短暂阻塞,同步完成后自动恢复
- 若
- 操作步骤:
- 停止node1的mariadb服务:
systemctl stop mariadb - 备份node1原有datadir(默认路径为
/var/lib/mysql)后,清空该目录下的所有文件,保留目录本身并修正权限:chown -R mysql:mysql /var/lib/mysql - 启动node1的mariadb服务:
systemctl start mariadb - 可通过
journalctl -u mariadb -f观察同步日志,待同步完成后登录node1执行SHOW STATUS LIKE 'wsrep_local_state_comment';,返回Synced即恢复完成
- 停止node1的mariadb服务:
注:当前仅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
相关产品推荐
相关产品推荐

