当使用 32 位版本的 MySQL 的 .net 连接器连接到 64 位版本的 MySQL 时,我得到“等待表元数据锁定”

Posted

技术标签:

【中文标题】当使用 32 位版本的 MySQL 的 .net 连接器连接到 64 位版本的 MySQL 时,我得到“等待表元数据锁定”【英文标题】:When using 32bit version of MySQL's .net connector to connect to a 64bit version of MySQL I get " Waiting for table metadata lock " 【发布时间】:2013-06-13 13:23:46 【问题描述】:

我有一个使用“AnyCPU”标志编译的 .net 应用程序。此应用程序使用 mysql 进行持久存储。

我遇到了一个奇怪的问题,即当我在 32 位机器上运行我的应用程序并将其连接到在另一台机器上运行的 64 位版本的 MySQL 时,我的查询最终处于“等待表元数据锁定”状态。

我已经测试过,当我的应用程序和 MySQL 在同一平台上运行时,它可以正常工作,即在 32 位或 64 位上运行。

这是我的理论,可能完全错误:)

由于我的应用程序是作为 32 位应用程序加载的,因此 .net 连接器程序集(我认为它是使用“anycpu”编译的)也将作为 32 位加载。我的猜测是,当 32 位 .net 连接器与 64 位 MySQL 通信时会出现问题。

我的理论正确吗?

a) 如果不是,请告诉我,找出问题所在的最简单方法是什么?

b) 如果是,我能做些什么。原因是我不能强制 .net 框架为我的 32 位应用程序以 64 位模式加载 mysql 的 .net 连接器程序集。即使这是可能的(在同一进程中),在加载连接器之前,我到底要如何知道我的应用程序将连接到哪种类型的 MySQL ......?

附:我的直觉是,根据谷歌的说法,这个理论不太可能是正确的,以前没有人遇到过这个问题。

【问题讨论】:

【参考方案1】:

这听起来与给出的错误消息中的 64/32 位无关。

看看这个 SO 问题和答案,看看是否能提供任何线索:How do I find which transaction is causing a "Waiting for table metadata lock" state?

【讨论】:

是的,在发布此问题之前,我确实查看了您链接的问题。但这没有帮助。

以上是关于当使用 32 位版本的 MySQL 的 .net 连接器连接到 64 位版本的 MySQL 时,我得到“等待表元数据锁定”的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:检查啥版本:32 位还是 64 位?

Delphi IDE 和 MySQL 32 和 64 位版本

如何使 .NET 可执行文件在 64 位操作系统上作为 32 位进程运行?

QT mysql

当同时安装 32 位和 64 位 JVM 时,如何使用 32 位 JVM 强制运行 Jar 文件?

使用 64 位版本的 openCV+Emgu 而不是 32 位有性能优势吗?