我想将一个实时生产数据库复制到本地开发数据库中。是否有一种方法可以在不锁定生产数据库的情况下做到这一点?

我目前正在使用:

mysqldump -u root --password=xxx -h xxx my_db1 | mysql -u root --password=xxx -h localhost my_db1

但是它在运行时锁定了每个表。


当前回答

老实说,我会为此设置复制,因为如果不锁定表,就会从转储中获得不一致的数据。

如果转储需要较长的时间,则已经转储的表可能已经更改,而某些表可能即将被转储。

因此,要么锁定表,要么使用复制。

其他回答

当使用MySQL工作台时,在数据导出中,单击高级选项并取消选中“锁定表”选项。

这已经太迟了,但对任何正在搜索这个话题的人来说都是好事。如果你不是innoDB,并且你不担心转储时锁定,那么就使用这个选项:

--lock-tables=false

答案取决于您使用的存储引擎。最理想的情况是使用InnoDB。在这种情况下,您可以使用——single-transaction标志,它将在转储开始时为您提供数据库的一致快照。

要转储大型表,您应该结合使用——single-transaction选项和——quick。

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction

这和那个说他迟到的人比起来差不多晚了,但在我的情况下(在Windows 7上通过WAMP下载MySQL),我不得不使用:

--skip-lock-tables