0

一段时间以来,我们一直从我们的 mysql 服务器收到“未知列”错误。

错误如下所示:

Unknown column 'JOIN search_table��z[.cc.' in 'field list' 
Unknown column '(`IX_cfs$order$make$model`) INNER JOIN search_t' in 'field list'
Unknown column 'eated, cp.stat_sales, cp.stat_views, cp.culture_code' in 'field list'
+ more

最奇怪的部分是我们的 .NET 代码中的哪些方法得到错误是完全随机的。即使在查询中不包含任何报告的错误表的方法,有时也会报告“未知列”错误,其中包含不属于该查询的 SQL 代码...... :-(

我们正在运行 Windows 2008、mysql 5.0.45 和 MySQL 连接器 6.2、.NET 3.5。我们平均每秒 250 个请求,峰值为 750 个请求/秒。MySQL CPU 使用率为 10-50%,内存使用率为 5-6 GB(8 GB 可用)。

这些错误仅在几个月前开始,但已经变得越来越频繁,以至于我们每天从 ELMAH 收到 +500 个错误。我们怀疑这可能是 mysql 服务器压力过大,连接混合(在 mysql 或 .NET 连接池中)。

我们试图在本地和单独的相同服务器设置上重现它,但到目前为止,重新生成错误没有运气,因为它不会发生在所有 sql 查询中,但是重新启动 mysql 服务可以消除一段时间的错误的时间。但是随着我们的用户群和服务器负载以每月 10-15% 的速度增长,错误变得更加频繁。

任何帮助,想法,建议都非常感谢......

附加信息: 我们通过修复所有 SQL 注入尝试的自定义函数运行所有外部参数(查询字符串、表单发布数据、Web 服务参数以及内部参数)。而且我们不使用“动态”SQL,只使用存储过程。

除此之外,最常见的返回“未知列”错误的方法是 .NET 中仅将 int32 作为输入参数的方法,而 MySQL SP 也仅将 int 作为参数。

此外,我们将所有内容都包装在 try-catch-finally 中,我们得到的错误来自我们的错误处理模块(主要是 ELMAH)

4

1 回答 1

0

看起来损坏的查询字符串正在传递给 mySQL。

您的 .Net 应用程序几乎可以肯定是罪魁祸首。

建议:

  1. 再次查看进行查询的代码。

  2. 如果幸运的话,您可以轻松隔离实际的 SQL

  3. 无论如何,请确保相关代码:创建查询的位置,然后是进行查询的位置,最后是访问结果的位置 - 包含在 try/catch 块中。

    我猜测某些未处理的异常可能会使您脱离您期望采用的控制路径流,从而导致数据损坏。

于 2012-05-27T20:24:32.253 回答