我们正在将一些网站迁移到运行 Windows 2008 虚拟机的云基础架构上。这些网站都运行在带有 MySQL 数据库的 ColdFusion 上。它们目前在我们的 CoLo 中运行,没有任何问题。此外,它们在我们办公室的开发网络上运行,没有任何问题。
我们正在设置我们的云,以尽可能地匹配我们当前使用的配置,本质上,CF10 + IIS 在一台服务器上,MySQL 在另一台机器上。我们已经完成了 99%,大多数事情都运行良好。然而....
我们遇到了一对夫妇,如在 2 中,我们单击链接/按钮并受到欢迎的地方:
执行数据库查询时出错。
通信链路故障 从服务器成功接收到的最后一个数据包是 0 毫秒前。最后一个成功发送到服务器的数据包是 0 毫秒前。
扫描堆栈跟踪我还发现:
Caused by: java.net.SocketException: Connection reset
通信链路错误总是:0ms。
最令人费解的是,似乎导致这种情况的查询是在所有站点上使用的简单查询,没有任何问题。为什么他们在这两个特定的地方都失败了,这让我们束手无策。
我们唯一的线索是,查看调用了哪些脚本的 CF 错误描述,我们可以看到查询失败的脚本被调用了两次?例如,我们的应用程序文件中出现了一种情况:
>The error occurred in D:/Our_Web_Sites/oursite/Application.cfm: line 73
>Called from D:/Our_Web_Sites/oursite/Application.cfm: line 17
>Called from D:/Our_Web_Sites/oursite/Application.cfm: line 1
>Called from D:/Our_Web_Sites/oursite/Application.cfm: line 73
>Called from D:/Our_Web_Sites/oursite/Application.cfm: line 17
>Called from D:/Our_Web_Sites/oursite/Application.cfm: line 1
我们在 CF 代码中找不到任何会导致脚本被调用两次的东西,所以我们猜测第一次调用在 Query 上失败,所以 CF 再次尝试……只是失败和错误。
谷歌搜索这个问题我发现了很多关于更改 MySQL 超时的帖子。这些都不起作用,我没想到它们会起作用,因为我们正在处理的似乎不是超时问题。这些页面每次都失败。
我们最接近解决方案的方法来自此博客文章: http ://www.talkingtree.com/blog/index.cfm/2011/1/12/Validation-Query-for-MySQL-communications-link-failure !
如果我们取消选中 CFAdmin 中的“维护跨客户端请求的连接。”设置,那么错误就会消失。该博客建议将其选中,这是我们的偏好,并使用“SELECT 1;”的连接验证。试试……同样的错误。
我们还尝试了 JDBC AutoConnect=true 选项。没有效果。
下载最新的 JDBC 连接器并使用它代替标准的 CF10-MySQL 连接器。没有效果。
同样,除了这两个链接之外,99% 的网站都可以正常工作,这两个链接在我们所有其他环境中都可以正常工作。还有其他想法吗?