运行MySQLDump,不锁表

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

我目前正在使用:

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

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

445341 次浏览

--lock-tables=false选项有效吗?

根据手册页,如果你正在转储InnoDB表,你可以使用--single-transaction选项:

--lock-tables, -l


Lock all tables before dumping them. The tables are locked with READ
LOCAL to allow concurrent inserts in the case of MyISAM tables. For
transactional tables such as InnoDB and BDB, --single-transaction is
a much better option, because it does not need to lock the tables at
all.

innodb数据库:

mysqldump --single-transaction=TRUE -u username -p DB

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

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

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

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

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

--lock-tables=false

--skip-add-locks帮助了我

    mysqldump -uuid -ppwd --skip-opt --single-transaction --max_allowed_packet=1G -q db |   mysql -u root --password=xxx -h localhost db

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

< a href = " http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html option_mysqldump_single-transaction " > http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html option_mysqldump_single-transaction < / >

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

--skip-lock-tables

对于InnoDB表,使用--single-transaction标志

它转储数据库在BEGIN时刻的一致状态

MySQL文档

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

由于这些方法对我都不起作用,我只是做了一个:

mysqldump [...] | grep -v "LOCK TABLE" | mysql [...]

它将排除LOCK TABLE <x>UNLOCK TABLES命令。

注意:希望你的数据不包含这个字符串!

另一个迟来的回答是:

如果你试图制作服务器数据库的热拷贝(在linux环境中),并且所有表的数据库引擎都是MyISAM,你应该使用mysqlhotcopy

相应的文件:

使用FLUSH TABLES、LOCK TABLES、cp或scp来创建数据库 备份。这是一种快速备份数据库或单个数据库的方法 表,但是它只能在数据库所在的同一台机器上运行 目录被定位。Mysqlhotcopy只适用于备份

. MyISAM和ARCHIVE

LOCK TABLES时间取决于服务器复制MySQL文件的时间(它不转储)。

由于https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_lock-tables:

有些选项,比如——opt(默认启用),会自动启用——lock-tables。如果您想覆盖这个选项,请在选项列表的末尾使用——skip-lock-tables。

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

enter image description here

如果您使用Percona XtraDB集群- 我发现 ——skip-add-locks
到mysqldump命令 允许Percona XtraDB集群运行转储文件

. dump文件中的LOCK TABLES命令没有问题