我们使用的是Percona 5.7.16-10服务器。我想用XtraDB集群扩展当前的解决方案。因此,同时我创建了其他机器并启动了集群(运行在5.7.17-11-57 Percona XtraDB集群版本上),并在那里做了一些测试(似乎一切正常)。现在,我想从正在运行的服务器中转储当前数据库,并将其插入集群。停止集群没有问题(因为它是用于测试的)。但是,当我像以前一样创建mysqldump时,由于pcx_strict_mode (info 这里)的原因,我无法将它插入集群--强制执行Percona-XtraDB-Cluster prohibits use of LOCK TABLE/FLUSH TABLE <table> WITH READ LOCK with pxc_strict_mode = ENFORCING
,因为mysqldump创建了包含被禁止的表锁的脚本。因此,我测试了更多的选项,比如不会检查此规则的MASTER,但是没有帮助,因为转储中的insert查询被卡住了,什么也没有发生。
是否有避免表锁定查询的mysqldump选项,或者我是否必须通过XtraBackup以某种方式恢复它,并将XtraBackup用于当前运行的服务器?
我读过几个主题这里,但没有任何一个主题与相同的问题相匹配。每个人都在解决如何从失败中恢复集群,而不是从头开始。
对于mysqldump的任何建议,或者向集群中“插入”旧数据库的正确方法,我都会很高兴。
发布于 2017-04-10 00:46:58
如果您可以删除当前的机器,如果您正在从头构建集群,那么我认为(在mysqldump
上)这些(在strict_mode上)将避免这个strict_mode,可能还会避免其他一些问题:
--skip_add_locks --skip-lock-tables
也不要使用
--single-transaction --lock-all-tables
同样明智的做法是获取集群中装载数据的第一个节点,然后添加到其他节点上,让它们使用SST加载自己。
如果您需要保持当前服务器的活力,那么我们需要讨论如何使它成为主服务器和新集群的一个节点为从节点。另外,XtraBackup可能会更适合。但现在,锁和单笔交易是必要的。因此,将strict_mode设置为DISABLED
似乎是正确的,因为集群正在构建,而且还没有运行。
(请注意:我没有执行你的任务的经验;如果其他人提供了一个更有说服力的答案,那就跟他们去吧。)
https://stackoverflow.com/questions/43280164
复制相似问题