关于mysql:skip-lock-tables和mysqldump

skip-lock-tables and mysqldump

每天,我们在大约50个单独的数据库上运行mysql转储,将它们打包,然后将它们存储在异地。 这些数据库中的一些相当大,并且包含myisam表(无法更改,因此表明它没有意义。)。我一直在阅读转储时使用skip-lock-tables选项的内容,但尚未了解不利之处 是。 我所看到的基本上是不同的迭代:"如果在转储时将数据插入到表中,可能会产生不利影响"。

这些不利影响是什么? 这是否只是意味着我们将在还原时错过这些查询,还是意味着转储文件将被破坏且无用? 老实说,如果我们丢失了在转储开始后发布的新数据,我将不在乎,因为我只是在及时寻找快照。

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


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

1
SELECT SQL_NO_CACHE * FROM my_large_table

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