将mysql转储中断复制?

时间:2014-01-14 21:23:49

标签: mysql replication mysqldump

我有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)
  3. 这会导致复制出现任何问题吗?

    我相信转储会执行所有操作并将其保存到bin日志中,并且奴隶将能够看到它并复制它而没有任何问题。

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

    感谢

1 个答案:

答案 0 :(得分:1)

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

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

因此,您必须在还原时停止从站上的复制。

以下是典型的从站重新初始化的步骤:

  1. 来自master的mysqldump,带有--master-data选项,因此转储包含转储时当前的二进制日志位置。
  2. 停止从站上的复制。
  3. 恢复从属服务器上的转储。
  4. 使用CHANGE MASTER更改从站启动的二进制日志坐标。使用转储中保存的坐标。
  5. 启动奴隶。

  6. 重新评论:

    好的,我现在更了解你的需求。

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

    你甚至可以做出口&只需两步即可导入:

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