我们使用的是Percona 5.7.16-10服务器。我想使用 XtraDB 集群扩展当前解决方案。因此,与此同时,我创建了其他机器并启动了集群(在 5.7.17-11-57 Percona XtraDB 集群版本上运行),并在那里进行了一些测试(一切似乎都运行良好)。现在我想从正在运行的服务器转储当前数据库并将其插入集群。停止集群没有问题(因为它用于测试)。但是当我像以前一样创建 mysqldump 时,由于pcx_strict_mode(信息在这里),我无法将其插入集群 - 强制执行Percona-XtraDB-Cluster prohibits use of LOCK TABLE/FLUSH TABLE <table> WITH READ LOCK with pxc_strict_mode = ENFORCING
因为 mysqldump 创建的脚本包含禁止的表锁。所以我测试了更多选项,例如 MASTER,它应该不检查此规则,但它没有帮助,因为来自转储的插入查询卡住了并且没有任何反应。
是否有任何 mysqldump 选项可以避免表锁定查询,或者我是否必须以某种方式通过 XtraBackup 恢复它并为当前正在运行的服务器使用 XtraBackup?
我在这里阅读了几个主题,但没有匹配任何具有相同问题的人。每个人都在解决如何从某些故障中恢复集群,而不是从头开始。
我将很高兴收到有关mysqldump的任何建议或将旧数据库"插入"集群的正确方法。
如果您可以关闭当前的机器,并且从头开始构建集群,那么我认为这些(在mysqldump
)将避免该strict_mode,并可能避免其他一些问题:
--skip_add_locks --skip-lock-tables
并且不要使用
--single-transaction --lock-all-tables
让集群中的第一个节点加载数据,然后添加其他节点,让它们使用 SST 加载自己,也可能是明智的。
如果您需要保持当前服务器处于活动状态,那么我们需要讨论使其成为主服务器,新集群的一个节点成为从服务器。 另外,XtraBackup可能更适合。 但是现在,锁和单笔交易将是必要的。 因此,将该strict_mode设置为DISABLED
似乎是正确的,因为集群正在构建中,尚未上线。
(警告:我没有执行你的任务的经验;如果其他人提供了更有说服力的答案,那就和他们一起去吧。