【问题标题】:Restoring database to new cluster将数据库恢复到新集群
【发布时间】:2017-04-07 14:04:59
【问题描述】:

我们正在使用 Percona 5.7.16-10 服务器。我想用 XtraDB 集群扩展当前的解决方案。因此,与此同时,我创建了其他机器并启动了集群(在 5.7.17-11-57 Percona XtraDB Cluster 版本上运行)并在那里进行了一些测试(一切似乎都运行良好)。现在我想从正在运行的服务器中转储当前数据库并将其插入集群。停止集群没有问题(因为它是为了测试)。但是,当我按照习惯创建 mysqldump 时,由于 pcx_strict_mode (info here),我无法将其插入集群 - 强制执行 Percona-XtraDB-Cluster prohibits use of LOCK TABLE/FLUSH TABLE <table> WITH READ LOCK with pxc_strict_mode = ENFORCING,因为 mysqldump 创建的脚本包含禁止的表锁。所以我测试了更多的选项,比如 MASTER,它不应该检查这个规则,但它没有帮助,因为来自转储的插入查询卡住了,什么也没有发生。

是否有任何 mysqldump 选项可以避免表锁定查询,或者我是否必须通过 XtraBackup 以某种方式恢复它并将 XtraBackup 用于当前正在运行的服务器?

我已经阅读了几个主题here,但没有找到遇到相同问题的任何人。每个人都在解决如何从失败中恢复集群,而不是从头开始。

对于 mysqldump 的任何建议或将旧数据库“插入”到集群中的正确方法,我都会很高兴。

【问题讨论】:

    标签: mysql database percona xtradb


    【解决方案1】:

    如果你可以关闭你当前的机器,并且如果你从头开始构建集群,那么我认为这些(在 mysqldump 上)将避免该 strict_mode 以及可能的其他一些问题:

    --skip_add_locks --skip-lock-tables
    

    不要使用

    --single-transaction --lock-all-tables
    

    让集群中的第一个节点加载数据也是明智之举,然后添加其他节点,让它们使用 SST 加载自己。

    如果您需要保持当前服务器处于活动状态,那么我们需要讨论使其成为 Master 并且新集群的一个节点成为 Slave。加上 XtraBackup 可能更适合。但是现在,锁和单一事务将是必要的。因此,将 strict_mode 设置为 DISABLED 似乎是正确的,因为集群正在构建中,但尚未上线。

    (警告:我没有执行您的任务的经验;如果其他人提供了更令人信服的答案,请与他们一起去。)

    【讨论】:

    • 谢谢!不确定我上次尝试时发生了什么,但正如您所料,将 strict_mode 设置为 DISABLED,在第二次尝试时工作(我之前一定犯了一些错误)。对于一些未来的读者,我在打开 --single-transaction 的情况下进行了常规转储,然后使用 DISABLED 模式重新启动集群并恢复数据库(因为我正在提取一些实时数据进行测试)。一旦它可用,我会给你赏金,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2019-12-20
    • 2013-03-23
    • 1970-01-01
    • 2016-08-16
    • 2019-03-18
    • 2013-09-03
    相关资源
    最近更新 更多