首页 / MYSQL / mysql打不开表问题解决方案
mysql打不开表问题解决方案
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql打不开表问题解决方案,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1797字,纯文字阅读大概需要3分钟。
内容图文
![mysql打不开表问题解决方案](/upload/InfoBanner/zyjiaocheng/498/0e709c2b280742d7a26c27d9e9a59e29.jpg)
最近项目中的数据库查询经常挂起,应用程序启动后也报操作超时。测试人员就说数据库又挂了(貌似他们眼中的连接失败,查询无果都是挂了),通过 show processlist
一看,满屏都是 Waiting for table metadata lock
状态的连接。第一反应就是kill掉这些连接,奈何连接实在太多,实在kill不过来,于是重启服务,貌似重启果真能解决90%的问题,但如果不找到问题原因,问题也肯定会再次出现。
在网上查询得知MySQL在进行一些alter table等DDL操作时,如果该表上有未提交的事务则会出现 Waiting for table metadata lock
,而一旦出现metadata lock,该表上的后续操作都会被阻塞(详见 http://www.bubuko.com/infodetail-1151112.html)。所以这个问题需从两方面解决:
1. 查看未提交事务
从 information_schema.innodb_trx 表中查看当前未提交的事务
select trx_state, trx_started, trx_mysql_thread_id, trx_query from information_schema.innodb_trx\G
- 1
(\G作为结束符时,MySQL Client会把结果以列模式展示,对于列比较长的表,展示更直观)
字段意义:
- trx_state: 事务状态,一般为RUNNING
- trx_started: 事务执行的起始时间,若时间较长,则要分析该事务是否合理
- trx_mysql_thread_id: MySQL的线程ID,用于kill
- trx_query: 事务中的sql
一般只要kill掉这些线程,DDL操作就不会Waiting for table metadata lock。
2. 调整锁超时阈值
lock_wait_timeout
表示获取metadata lock的超时(单位为秒),允许的值范围为1到31536000(1年)。 默认值为31536000。详见 https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_lock_wait_timeout 。默认值为一年!!!已哭瞎!将其调整为30分钟
set session lock_wait_timeout = 1800;
set global lock_wait_timeout = 1800;
- 1
- 2
好让出现该问题时快速故障(failfast)
mysql打不开表问题解决方案
标签:amp content ring statistic txt ble ssi print body
本文系统来源:https://www.cnblogs.com/cyl048/p/8352225.html
内容总结
以上是互联网集市为您收集整理的mysql打不开表问题解决方案全部内容,希望文章能够帮你解决mysql打不开表问题解决方案所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。