Galera集群启动常见故障排查与修复指南
故障一:WSREP: failed to open gcomm backend connection: 131(无效UUID)
错误信息示例:
WSREP: failed to open gcomm backend connection: 131: invalid UUID
解决方案:
进入该节点的数据库目录(如 /var/lib/mysql/),找到 gvwstate.dat 文件并将其重命名或移除(如 mv gvwstate.dat gvwstate.dat.bak)。之后重新启动 MariaDB 即可。
故障二:bind: Address already in use(地址被占用)
错误信息示例:
bind: Address already in use
解决方案:
使用命令 ps -ef | grep mysql 查看 MySQL 进程,然后强制终止相关进程(如 kill -9 [PID]),再尝试启动 MariaDB。
故障三:It may not be safe to bootstrap the cluster from this node(该节点不安全,无法引导集群)
错误信息示例:
[ERROR] WSREP: It may not be safe to bootstrap the cluster from this node. It was not the last one to leave the cluster and may not contain all the updates. To force cluster bootstrap with this node, edit the grastate.dat file manually and set safe_to_bootstrap to 1 .
问题说明:
该节点并非最后一个离开集群的节点,可能未包含完整数据更新。若强制从此节点引导,需手动修改 grastate.dat 文件中的 safe_to_bootstrap 参数为 1。
解决方案:
首先检查每个节点的 /var/lib/mysql/grastate.dat 文件,找到 safe_to_bootstrap=1 的节点,然后在该节点上执行启动命令。若所有节点均出现类似错误,需要手动选取一个主节点,修改其 grastate.dat 文件:
vim /var/lib/mysql/grastate.dat
# 将 safe_to_bootstrap = 0 改为 safe_to_bootstrap = 1
然后在主节点执行:
service mysql start --wsrep-new-cluster
其他节点正常启动:
service mysql start
故障四:[ERROR] WSREP: failed to open gcomm backend connection: 110(连接超时)
错误信息示例:
[ERROR] WSREP: failed to open gcomm backend connection: 110
现象描述:
集群三个节点均无法启动,日志中报连接超时。检查发现 gvwstate.dat 不存在,所有节点的 grastate.dat 中 seqno 值均为 -1,且缺少 safe_to_bootstrap 参数。
原因分析:
- 正常关闭数据库时,
gvwstate.dat不会生成;若三个节点同时关闭且无数据变化,seqno应相等且不为 -1。 - 若节点先后启动不当,所有节点会不断重启,
seqno会由原值变为 -1。 - 此时无法选举出主启动节点,需要在第一个节点手动指定为集群主节点启动。
解决方案:
方法一:在主节点使用 --wsrep-new-cluster 参数启动:
service mysql start --wsrep-new-cluster
其他节点正常启动:
service mysql start
方法二:清除所有节点的缓存文件和锁文件后重启:
rm -rf /var/lock/subsys/mysql
cd /var/lib/mysql
rm -rf galera.cache
rm -rf grastate.dat
第一个节点启动:
service mysql start --wsrep-new-cluster
其他节点正常启动:
service mysql start
故障五:MySQL Unknown/unsupported storage engine: INNODB(未知或不支持的存储引擎)
解决方案:
删除数据库目录下的以下文件:
rm -f /var/lib/mysql/ib_logfile0
rm -f /var/lib/mysql/ib_logfile1
rm -f /var/lib/mysql/ibdata1
然后重新启动 MariaDB 服务。
故障六:[ERROR] mysqld: Table './mysql/user' is marked as crashed and should be repaired(表崩溃,需要修复)
错误信息示例:
[ERROR] mysqld: Table './mysql/user' is marked as crashed and should be repaired
问题说明:
异常断电等原因可能导致单节点无法启动,并提示某张表(如 mysql.user)已损坏。
解决方案:
使用 myisamchk 工具修复损坏的表:
./myisamchk -c -r /var/lib/mysql/mysql/user.MYI