skip-lock-tables和mysqldump

Jaf*_*afo 15 mysql locking mysqldump

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

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

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

geo*_*kis 27

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

SELECT SQL_NO_CACHE * FROM my_large_table
Run Code Online (Sandbox Code Playgroud)

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

  • 我不确定我理解你的观点......这些选项在执行逻辑备份时提供尽可能少的数据库操作阻止.您牺牲了一致性,并通过在进行备份时查询数据库来获得"可用性".**更正:**在InnoDB表中使用--single-transaction时,您可以获得完美一致的快照,因为所有内容都在一个事务下执行(这并不奇怪 - 毕竟它是参数的名称!). (2认同)