我有2个数据库X“生产”和Y“测试
数据库X在结构上应与Y相同。但是,它们并不是因为我对生产做了很多改变。 现在,我需要以某种方式导出X并将其导入Y而不会破坏任何复制。
我正在考虑进行mysql转储,但我不想对复制提出任何问题,这就是我要求确认这个问题的原因。
以下是我要遵循的步骤
这会导致复制出现任何问题吗?
我相信转储会执行所有操作并将其保存到bin日志中,并且奴隶将能够看到它并复制它而没有任何问题。
我想做的是正确的吗?它会导致任何复制问题吗?
感谢
答案 0 :(得分:1)
是的,从X备份并恢复到Y是正常操作。我们经常称之为“重新初始化奴隶。”
这会中断复制。在让从站继续应用更改的同时,没有可靠的方法来恢复数据,因为从站正在处理的更改与备份所代表的数据的快照不同步。您可能会覆盖已更改的数据或错过更改,这会使从属设备完全不同步。
因此,您必须在还原时停止从站上的复制。
以下是典型的从站重新初始化的步骤:
--master-data
选项,因此转储包含转储时当前的二进制日志位置。CHANGE MASTER
更改从站启动的二进制日志坐标。使用转储中保存的坐标。重新评论:
好的,我现在更了解你的需求。
是的,mysqldump --no-data
有一个选项,因此输出只包含CREATE TABLE和其他DDL,但没有包含数据的INSERT语句。然后,您可以将其导入同一服务器上的单独数据库。你是对的,默认情况下,DDL语句被添加到二进制日志中,因此任何复制从属服务器都会自动运行相同的语句。
你甚至可以做出口&只需两步即可导入:
$ mysqladmin create newdatabase
$ mysqldump --no-data olddatabase | mysql newdatabase