在不锁定表的情况下运行MySQLDump
时间:2020-03-06 14:27:24 来源:igfitidea点击:
我想将一个实时生产数据库复制到我的本地开发数据库中。有没有一种方法可以在不锁定生产数据库的情况下进行操作?
我目前正在使用:
mysqldump -u root --password=xxx -h xxx my_db1 | mysql -u root --password=xxx -h localhost my_db1
但是它在运行时锁定每个表。
解决方案
--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 DB:
mysqldump --single-transaction=TRUE -u username -p DB
老实说,我会为此设置复制,就好像我们不锁定表一样,也会从转储中获取不一致的数据。
如果转储需要更长的时间,则已经转储的表可能会与仅将要转储的某些表一起更改。
因此,或者锁定表,或者使用复制。
答案因我们使用的存储引擎而异。理想的情况是,如果我们使用的是InnoDB。在这种情况下,我们可以使用--single-transaction
标志,这将在转储开始时为我们提供数据库的一致快照。
这个年龄已经来不及了,但是对于正在搜索该主题的任何人来说都不错。如果我们不是innoDB,并且我们不担心在转储时锁定,则只需使用以下选项:
--lock-tables=false
--skip-add-locks
对我有帮助