集群服务器因为某些原因集体断电,启动服务器后集群服务重启失败,每个节点都发生以下错误:
[ERROR] [MY-000000] [Galera] 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 .
[ERROR] [MY-000000] [WSREP] Provider/Node (gcomm://192.168.1.201,192.168.1.202,192.168.1.203) failed to establish connection with cluster (reason: 7)
[ERROR] [MY-010119] [Server] Aborting
根据错误日志提醒,每个节点都不是最后一个离开集群的节点,可以手动修改grastate.dat文件,强制节点重新引导集群
每个节点都有一个grastate.dat文件,用于记录集群状态信息,包括节点的GTID(全局事务 ID)以及是否可以安全地从该节点引导集群,如果所有节点都因断电同时关闭,集群需要从上次关闭时的最后一个离开节点重新启动
找到最后一个离开的节点,检查每个节点的seqno值,找到seqno值最大的节点,这个节点通常是最后一个写入事务并且最接近崩溃时的状态。如果所有节点的seqno都是 -1,表示集群在崩溃前没有未提交的事务,任何节点都可以引导集群
cat /var/lib/mysql/grastate.dat
#node1查询到的信息
version: 2.1
uuid: ba079fd9-70fe-11ef-88af-3e4840438b8e
seqno: 14
safe_to_bootstrap: 0
#node2查询到的信息
version: 2.1
uuid: ba079fd9-70fe-11ef-88af-3e4840438b8e
seqno: 15
safe_to_bootstrap: 0
#node3查询到的信息
version: 2.1
uuid: ba079fd9-70fe-11ef-88af-3e4840438b8e
seqno: 15
safe_to_bootstrap: 0
强制引导集群,由于node2和node3的信息相同,所以这里采用node2
vim /var/lib/mysql/grastate.dat
version: 2.1
uuid: ba079fd9-70fe-11ef-88af-3e4840438b8e
seqno: 15
safe_to_bootstrap: 1
systemctl restart mysql@bootstrap.service
引导完成后,你不需要手动将safe_to_bootstrap改回 0,系统会自动管理这个标志。在正常的集群操作中,Percona XtraDB Cluster会根据节点的状态和事务进度自动更新grastate.dat文件,包括safe_to_bootstrap的值。