首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能不能超时我的脚本“同花顺表与读锁;”?

我能不能超时我的脚本“同花顺表与读锁;”?
EN

Database Administration用户
提问于 2013-10-24 18:22:38
回答 2查看 6.7K关注 0票数 1

我有一个EnterpriseLinux6系统运行MySQL 5.5。我正在尝试使用捕获每周文件系统快照的LVM

然而,正如我们中的许多人所经历的那样,“用读锁刷新表”可以导致死锁情况下,创建查询的待办事项。,填充连接池并有效地使系统脱机运行。事实上,昨晚我的“带读锁的同花顺表”由于一个长时间的查询而在执行8小时后才完成。

如果我使用这样的脚本执行MySQL快照,我是否可以以某种方式超时“读取锁的刷新表;”。如果它在一段时间后不执行,我想杀死它,避免不可避免的死锁。

代码语言:javascript
复制
mysql -u root <<-MYSQL_INPUT
FLUSH TABLES WITH READ LOCK;
SYSTEM /usr/local/bin/mysql-create-lvm-snapshot;
UNLOCK TABLES;
\q
MYSQL_INPUT
EN

回答 2

Database Administration用户

回答已采纳

发布于 2013-10-25 05:15:22

没有可靠的方法来中断FLUSH TABLES WITH READ LOCK。我不同意前面的答案。您可以任意尝试KILLing FLUSH查询。通常,这只会挂起直到原始命令完成。

不过,有个好消息要告诉你。您应该知道,为了获取LVM快照,FLUSH TABLES WITH READ LOCK并不是绝对必要的。

要求在下列情况下:

  • 您对时间点恢复感兴趣(通过binlog应用增量恢复)
  • 您有许多非事务性(即MyISAM)表正在写入。
  • 您正在针对主程序运行快照,并希望基于该快照创建一个从服务器。

如果您的数据库是面向InnoDB的,并且没有什么有趣的地方与您的MyISAM系统表(即没有人创建过程,GRANTing特权等)。那么,您只需要对这些表进行FLUSH就够了。

所有的事情,InnoDB,你可以采取的快照。FLUSH是没有好处的。无论如何,InnoDB都会做出适当的恢复。

FLUSH TABLE的需求来自当您希望能够重新构建一个从日志或以其他方式使用二进制日志时,需要获取二进制日志文件和位置。

票数 5
EN

Database Administration用户

发布于 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表中),您可以考虑在中使用无锁选项。

这意味着,如果可以排除管理更改,则不需要刷新/锁定。

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/52147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档