为什么 MySQL 事件计划程序在打开表时卡住了?

Why is MySQL Event Scheduler Stuck Opening Tables?

我正在使用 MySQL 8.0.21 从 MySQL 社区安装程序 Windows 10 更新到版本 2004 并且出于某种原因如果我在事件调度程序中创建一个事件,它每秒调用一次过程(不管 SP 实际做了什么,我都会解释我的测试用例)——我的 CPU 达到最大值,当我查看活动时MySQL Workbench 中的连接,它堆积了 的工作线程,这些线程在“正在打开 Tables” 状态下停止。我的电脑死机了,我必须编辑要禁用的事件,停止任务管理器中的 MySQL 进程并重新启动服务。

测试用例

在设置全新服务器期间,我使用了所有默认设置,除了我启用了常规日志并且我使用了新的 8.0+ mysql_sha2_password 加密(尽管我将 USER 更改为 mysql_native_password phpmyadmin 这样可能会还原它,老实说我不确定)

此外,如果我启用或创建事件,它将 运行 没有问题,重要的是要注意问题开始时事件调度程序保持打开状态,并且事件保持启用状态,然后服务器从任务管理器中的服务重新启动。 CPU 立即达到最大和活动连接显示线程堆积而未完成。 感谢任何线索,我发现没有 actual 错误,我也不知道从哪里开始调试了。我试过跳过 grant tables(但显然这不是最优的,也没有用)。

我在查看 MySQL 8.0+ 文档时确实找到了提示

"如果重复事件没有在其调度间隔内终止,结果可能是事件的多个实例同时执行。如果这是不可取的,您应该建立一种机制来防止同时发生实例。例如,您可以使用 GET_LOCK() 函数,或行或 table 锁定。”来自

然而,在分析时似乎没有任何锁,我也不需要为这个测试用例(或我的实际程序)手动实现这样的锁


更新


到目前为止,尽管这是一个相当小众的错误,但我确实相信这就是问题所在,并且我已将其发布在 MySQL 错误论坛上。 Reference post is here:

答案实际上是一个可重现的错误 - Bug#: 100449