gpt4 book ai didi

mysql - MySQL release_lock()是否阻塞?

转载 作者:行者123 更新时间:2023-12-01 21:18:29 25 4
gpt4 key购买 nike

我正在运行MySQL:

~/g/profile> mysql --version
mysql Ver 14.14 Distrib 5.7.28, for osx10.13 (x86_64) using EditLine wrapper

我的Go应用程序是 performing some schema migrations,它以 SELECT GET_LOCK() 开头,然后执行一堆DDL和其他语句,然后执行 SELECT RELEASE_LOCK() 。所有这些查询都在同一连接上执行。

我正在遇到一种情况,其中迁移驱动程序返回成功(现已释放锁定),但是随后的后续SQL调用立即看到仅部分迁移的数据库图片。稍后调用将看到完全迁移的架构。

我已经阅读了有关这些MySQL函数的 the documentation。我知道这些创建/销毁了“咨询锁”,该锁没有权力阻止并发访问数据,除非两个应用程序使用相同名称的锁。

我的问题是, RELEASE_LOCK()是否有可能在以相同连接执行的其他语句之前返回,或者在此类语句完全生效之前返回?

最佳答案

如果您要运行:

GET_LOCK()
...some DDL statements...
RELEASE_LOCK()

而且这些都是在单个线程上串行运行的,那么不行,在DDL语句完成之前,RELEASE_LOCK()不可能运行。

实际上,DDL语句本身正在阻塞。在DDL完成之前,它们不会返回。

我怀疑您正在进行以下其中一种操作:
  • 一些DDL语句没有成功,但是您没有检查它们的错误状态。
  • 您正在尝试使用多个线程,并且以某种方式允许RELEASE_LOCK()在DDL线程完成之前运行。
  • 关于mysql - MySQL release_lock()是否阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60840009/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com