我有一个EnterpriseLinux6系统运行MySQL 5.5。我正在尝试使用捕获每周文件系统快照的LVM。
然而,正如我们中的许多人所经历的那样,“用读锁刷新表”可以导致死锁情况下,创建查询的待办事项。,填充连接池并有效地使系统脱机运行。事实上,昨晚我的“带读锁的同花顺表”由于一个长时间的查询而在执行8小时后才完成。
如果我使用这样的脚本执行MySQL快照,我是否可以以某种方式超时“读取锁的刷新表;”。如果它在一段时间后不执行,我想杀死它,避免不可避免的死锁。
mysql -u root <<-MYSQL_INPUT
FLUSH TABLES WITH READ LOCK;
SYSTEM /usr/local/bin/mysql-create-lvm-snapshot;
UNLOCK TABLES;
\q
MYSQL_INPUT发布于 2013-10-25 05:15:22
没有可靠的方法来中断FLUSH TABLES WITH READ LOCK。我不同意前面的答案。您可以任意尝试KILLing FLUSH查询。通常,这只会挂起直到原始命令完成。
不过,有个好消息要告诉你。您应该知道,为了获取LVM快照,FLUSH TABLES WITH READ LOCK并不是绝对必要的。
要求在下列情况下:
如果您的数据库是面向InnoDB的,并且没有什么有趣的地方与您的MyISAM系统表(即没有人创建过程,GRANTing特权等)。那么,您只需要对这些表进行FLUSH就够了。
所有的事情,InnoDB,你可以采取的快照。FLUSH是没有好处的。无论如何,InnoDB都会做出适当的恢复。
对FLUSH TABLE的需求来自当您希望能够重新构建一个从日志或以其他方式使用二进制日志时,需要获取二进制日志文件和位置。
发布于 2014-04-05 22:58:07
MySQL5.6引入了FLUSH TABLES FOR EXPORT,如果您只使用InnoDB (除了总是MyISAM的内部Mysql数据库),这可能是一个更好的用例选择:
http://dev.mysql.com/doc/refman/5.6/en/flush.html
不幸的是,我还不能在此发表评论,但我对上述Shlomi Noach的答案做了相当多的研究。我希望他是对的,但我无法证实他的说法,即对InnoDB表进行文件系统快照永远不会导致数据损坏。
来自https://dev.mysql.com/doc/refman/5.6/en/lock-tables.html的评论:
对于innodb的文件系统快照,我们发现将innodb_max_dirty_pages_pct设置为零;执行“使用readlock的刷新表”;然后等待innodb状态到达‘主线程进程no. \d+,id \d+,state:等待服务器活动’,就足以使无害is安静下来。
来自http://www.mysqlperformanceblog.com/2012/03/23/how-flush-tables-with-read-lock-works-with-innodb-tables/:
如果您只是使用Innodb表,并且没有积极地更改用户、存储过程等(这些都存储在MyISAM表中),您可以考虑在中使用无锁选项。
这意味着,如果可以排除管理更改,则不需要刷新/锁定。
https://dba.stackexchange.com/questions/52147
复制相似问题