当使用 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 时,我得到“等待表元数据锁定”的主要内容,如果未能解决你的问题,请参考以下文章
Delphi IDE 和 MySQL 32 和 64 位版本
如何使 .NET 可执行文件在 64 位操作系统上作为 32 位进程运行?