内容提要
最近,一个Percona XtraDB Cluster(PXC)节点从一个标准的MySQL实例进行复制时出现了“节点已从集群中删除”的错误。通过查看主服务器上的二进制日志,发现复制在一个MyISAM表的DDL上卡住了,而Galera Cluster不支持MyISAM引擎。需要修复MyISAM表并重新同步集群。教训是在使用产品之前要了解其限制,以避免数据丢失的风险。
延伸解读
错误根源:MyISAM表触发Galera限制
文章指出,PXC节点复制标准MySQL时出现“节点已从集群中删除”错误,直接原因是主库上执行了MyISAM表的DDL。Galera Cluster仅支持InnoDB,对非InnoDB表的写入不会被复制,因此复制线程在遇到该DDL时卡住并报错。这提醒我们,在混合使用标准MySQL和Galera集群时,必须确保源库中不包含MyISAM等非事务引擎表,否则复制链路会因不支持的引擎而中断。
应急处理与长期修复
作者通过手动在集群节点创建表,并使用Percona的pt-slave-restart工具跳过错误来恢复复制。但这只是临时措施,根本解决需要将源库的MyISAM表转换为InnoDB,并重新同步集群。文章强调,跳过错误可能掩盖数据不一致的风险,因此修复后必须重新同步以确保集群数据完整。这一过程也说明,在Galera环境中,任何非InnoDB表都需要提前识别和转换。
部署前核查限制清单
文章列举了Galera Cluster的多项限制,如仅支持InnoDB、所有表必须有主键、不支持LOCK TABLES等锁函数、XA事务不支持、写入吞吐受最弱节点限制等。这些限制意味着,在将PXC作为集群方案前,必须仔细阅读官方限制列表,并评估现有应用是否依赖不支持的特性。忽略这些限制可能导致复制中断、数据丢失或性能瓶颈,尤其是在生产环境中。
Q&A
Percona XtraDB Cluster 节点报错“Node has dropped from cluster”是什么原因导致的?
该错误是由于复制过程中遇到了一个 MyISAM 表的 DDL 语句,而 Galera Cluster 不支持 MyISAM 存储引擎,导致复制中断并报错。
Galera Cluster 支持 MyISAM 存储引擎吗?
不支持。Galera Cluster 仅支持 InnoDB 存储引擎,对其它类型表的写入不会被复制。
遇到 Galera 集群因 MyISAM 表复制中断,应该如何解决?
需要手动在集群节点上创建该表,并使用 Percona 的 pt-slave-restart 工具跳过错误;然后在源端将 MyISAM 表转换为 InnoDB,并重新同步集群。
Galera Cluster 有哪些主要限制?
主要限制包括:仅支持 InnoDB 引擎;所有表必须有主键;对其它类型表的写入不被复制;不支持 LOCK TABLES/UNLOCK TABLES、GET_LOCK() 等锁函数;不支持 XA 事务;写吞吐受最弱节点限制等。
为什么在使用 Galera Cluster 前需要了解其限制?
因为使用不支持的特性(如 MyISAM 表)可能导致复制中断、数据丢失风险,提前了解限制可以避免生产环境中的故障。
如何诊断 Galera 集群中复制卡在哪个语句?
可以查看主库的二进制日志或从库的中继日志,使用 mysqlbinlog 命令并指定起始位置来解析具体执行的 SQL 语句。