我想将一个实时生产数据库复制到本地开发数据库中。是否有一种方法可以在不锁定生产数据库的情况下做到这一点?
我目前正在使用:
mysqldump -u root --password=xxx -h xxx my_db1 | mysql -u root --password=xxx -h localhost my_db1
但是它在运行时锁定了每个表。
我想将一个实时生产数据库复制到本地开发数据库中。是否有一种方法可以在不锁定生产数据库的情况下做到这一点?
我目前正在使用:
mysqldump -u root --password=xxx -h xxx my_db1 | mysql -u root --password=xxx -h localhost my_db1
但是它在运行时锁定了每个表。
当前回答
要转储大型表,您应该结合使用——single-transaction选项和——quick。
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction
其他回答
要转储大型表,您应该结合使用——single-transaction选项和——quick。
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction
mysqldump -uuid -ppwd --skip-opt --single-transaction --max_allowed_packet=1G -q db | mysql -u root --password=xxx -h localhost db
答案取决于您使用的存储引擎。最理想的情况是使用InnoDB。在这种情况下,您可以使用——single-transaction标志,它将在转储开始时为您提供数据库的一致快照。
这已经太迟了,但对任何正在搜索这个话题的人来说都是好事。如果你不是innoDB,并且你不担心转储时锁定,那么就使用这个选项:
--lock-tables=false
由于https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_lock-tables:
有些选项,比如——opt(默认启用),会自动启用——lock-tables。如果您想覆盖这个选项,请在选项列表的末尾使用——skip-lock-tables。