【发布时间】:2020-06-09 01:16:02
【问题描述】:
这是我最近在我的 Google Cloud Platform 帐户的虚拟机中托管的 MySQLdb 5.7(带有 innoDB 引擎)中遇到的一个问题。
突然,我的数据库进入一个名为“用户”的特定表上的每个事务(例如登录)都失败(无限超时)的状态。
我犯了这个错误:pymysql.err.OperationalError: (1213, 'Deadlock found when trying to get lock; try restarting transaction'
好吧,基本上我会尝试找出是否可以从这个圈出的情况中自动恢复。我在 MySQL 的网站上读到,默认情况下执行回滚到最后一个事务,但为什么在我的情况下没有发生这种情况?在这种情况下呆了很长时间后,我不得不重新启动 MySQL 服务器。
我需要一些关于如何调查它或采取行动不再面对它的指示,因为它是一个包含客户的实时数据库。
【问题讨论】:
-
另一个事务持有表/行的锁。尝试使用
SHOW ENGINE INNODB STATUS;或/和select * from information_schema.innodb_lock_waits;和/或select * from information_schema.innodb_locks;识别此事务。可能正在运行备份? -
感谢您的快速回复!我认为这些查询仅在发生死锁时才显示结果,对吗?如果我想看看到底发生了什么,我该如何在谷歌云平台的错误日志中进行搜索?因为,我没有找到带有“死锁”关键字的记录,也许还有另一种方法可以找到?有没有办法从这种情况中自动恢复?
-
您能分享一下您在 Google Cloud Platform Logging 中看到的虚拟机错误吗?
-
嗨!我只是在寻找与死锁或类似问题相关的错误。我只是想找出导致这种无休止僵局的原因。
-
你好,约翰,这个问题解决了吗?如果不是:根据文档(dev.mysql.com/doc/refman/5.7/en/innodb-deadlocks.html),如果设置了“innodb_deadlock_detect”配置选项(默认情况下),或者如果“innodb_deadlock_detect”未设置并且使用选项定义的值,则会发生回滚“innodb_lock_wait_timeout”(秒数)已用完。
标签: mysql google-cloud-platform google-compute-engine database-deadlocks