mysqldump测试锁定表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysqldump测试锁定表相关的知识,希望对你有一定的参考价值。

我们在35G(innoDB)周围有生产mysql DB,当mysqldump启动应用程序变得不稳定时我们注意到了。我们使用以下命令来运行转储

mysqldump --password=XXXX --add-drop-table foo | gzip -c > foo.dmp.gz

谷歌搜索后,人们说倾销数据前mysqldump锁表,所以人们建议使用--single-transaction国旗为innoDB

所以对于实验,我手动启动mysqldump并对表读/写运行一些查询,它允许我在mysqldump运行时执行所有操作,所以我如何重现mysqldump真正锁定我的表导致应用程序可访问性的这种行为?

  • mysqldump是锁定读操作还是只写表?
  • 在这种情况下,我们使用MyISAM的数据库很少,我们应该做些什么来避免锁定
答案

使用--single-transaction来避免InnoDB表上的表锁。

尽管你真的不应该使用MyISAM,但你对MyISAM没什么可做的。最佳解决方法是创建只读副本并从副本进行备份,以便锁定不会影响应用程序。

您应该发现,当备份正在运行时,READ LOCAL锁定保存在当前正在备份的单个数据库中的表上,这意味着您可以从表中读取但是写入(插入/更新/删除)将阻止除了可以在不干扰锁定的情况下实现MyISAM上的某些插入。这些可能是允许的。看到这种情况发生的最简单方法是反复查询SHOW FULL PROCESSLIST;以查找阻塞的线程。

以上是关于mysqldump测试锁定表的主要内容,如果未能解决你的问题,请参考以下文章

如何锁定一个mysql数据库中的所有表?

mysql数据备份还原

mysqldumper

Linux备份数据库,mysqldump命令实例详解

请教一下mysql 行锁命令是啥?

mysqldump更新表