gpt4 book ai didi

replication - mysql转储会破坏复制吗?

转载 作者:行者123 更新时间:2023-11-29 03:02:23 28 4
gpt4 key购买 nike

我有 2 个数据库 X“生产”和 Y“测试”

数据库 X 的结构应与 Y 相同。但是,他们并不是因为我的疯狂而对制作进行了很多改动。现在,我需要以某种方式导出 X 并将其导入 Y 而不会破坏任何复制。

我正在考虑执行 mysql 转储,但我不想对复制提出任何问题,这就是我问这个问题以确认的原因。

这是我要遵循的步骤

  1. 支持生产。 (即 mysqldump -u root -p --triggers --routines X > c:/Y.sql)
  2. 恢复它。 (即 mysql -u root -p Y < c:\Y.sql)

这会导致复制出现任何问题吗?

我相信转储将执行所有内容并将其保存到它的 bin 日志中,从属设备将能够看到它并毫无问题地复制它。

我正在尝试做的是正确的吗?它会导致任何复制问题吗?

谢谢

最佳答案

是的,从 X 备份并恢复到 Y 是正常操作。我们通常称之为“重新初始化副本”。

这会中断复制。没有可靠的方法可以在让副本继续应用更改的同时恢复数据,因为副本正在处理的更改与备份所代表的数据快照不同步。您可能会覆盖已更改的数据,或错过更改,这会使副本完全不同步。

因此您必须在恢复时停止副本上的复制。

以下是典型副本重新初始化的步骤:

  1. 来自主服务器的 mysqldump,带有 --master-data 选项,因此转储包括转储时当前的二进制日志位置。
  2. 停止复制副本。
  3. 在副本上恢复转储。
  4. 使用CHANGE MASTER 更改副本起始的二进制日志坐标。使用保存在转储中的坐标。
  5. 在副本上开始复制。

回复你的评论:

好的,我现在更清楚你需要什么了。

是的,mysqldump --no-data 有一个选项,所以输出只包括 CREATE TABLE 和其他 DDL,但没有包含数据的 INSERT 语句。然后您可以将其导入到同一台服务器上的单独数据库中。你是对的,默认情况下 DDL 语句被添加到二进制日志中,因此任何复制副本都会自动运行相同的语句。

您甚至可以像这样只需两步即可完成导出和导入:

$ mysqladmin create newdatabase
$ mysqldump --no-data olddatabase | mysql newdatabase

关于replication - mysql转储会破坏复制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21124320/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com