skip-lock-tables和mysqldump

时间:2011-09-14 11:39:12

标签: mysql locking mysqldump

每天我们在大约50个单独的数据库上运行mysql转储,打包它们然后将它们存储在异地。其中一些数据库相当大并且包含myisam表(不能更改,因此表明它没有意义)..我在阅读时正在阅读使用skip-lock-tables选项进行转储,但还没有读到下行的内容是。我所看到的只是基本上不同的迭代“如果数据在转储时插入到表中会导致不利影响。”

这些不利影响是什么?它只是意味着我们会在恢复时错过这些查询,还是意味着转储文件将被破坏且无用?老实说,如果我们在转储开始后丢失了新数据,我可能会更少关心,因为我只是在及时寻找快照。

我是否可以依赖这些数据库转储来包含在发出转储之前保存的所有数据。

1 个答案:

答案 0 :(得分:27)

--skip-lock-tables 参数指示mysqldump实用程序在获取将在每个表上获取READ锁定的转储之前不发出 LOCK TABLES 命令。应锁定数据库中的所有表,以便在备份过程中提高一致性。即使使用skip-lock-tables,在转储表时,也不会收到任何INSERT或UPDATE,因为它将被锁定,因为从表中获取所有记录需要SELECT。看起来像这样

SELECT SQL_NO_CACHE * FROM my_large_table

您可以使用 SHOW PROCESSLIST 命令在进程列表中看到它。 如果您使用的是非事务性的MyISAM引擎,那么在任何情况下锁定表都不能保证参照完整性和数据一致性,我个人几乎总是使用 --skip-lock-tables 参数。在InnoDB中,使用 - single-transaction 参数来获得预期效果。 希望这会有所帮助。