2012-05-27 104 views
0

一段时间以来,我们一直在从我们的mysql服务器收到“未知列”错误。奇怪的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%,错误变得更加频繁。

任何帮助,想法,意见是非常赞赏...

附加信息: 我们正在运行的所有外部paramters(查询字符串,表单POST数据,web服务参数,并且还内置参数)thrue一自定义函数,可以修复所有SQL注入尝试。我们不使用“动态”SQL,只使用存储过程。

除此之外,返回“未知列”错误的最常用方法是.NET中的一个方法,它只接受一个int32作为输入参数,而MySQL SP也只接受一个int作为参数。

而且我们的try-catch-finally程序包的一切,我们所得到的错误是从我们的错误处理模块(主要ELMAH)

+1

“thrue一个自定义函数,修复所有SQL注入尝试。”这个功能究竟做了什么?为什么它首先需要 - .NET没有适当的卫生方法? (自定义功能非常频繁的罪魁祸首,当数据被搞砸了。) –

+0

我们传递了“不安全”的数据被剥没有想HTML标记的自定义函数,替换某些字符像'''”与他们的HTML实体值。 我们已经使用了8年以上的函数,并且遇到了更新的经验问题,但是mysql的错误也是由简单的SP调用返回的情况下的99%,它只将int作为输入参数并进行简单的选择。在返回的错误看起来他们是完全不同的SQL查询。 也是事实的错误是“未知栏”,然后SQL代码,而不是列名混淆了我们很大的时间。 – Obiwan

回答

0

它看起来像一个腐败的查询字符串获取传递到MySQL。

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

几点建议:

  1. 在多数民众赞成使得查询的代码再看看。

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

  3. 任何任何情况下,确保了相关代码:在您创建查询,然后在您进行查询,并最终在那里你访问结果 - 被包装在try/catch块中。

    我在猜测,一些未处理的异常可能会将您带出您期望采用的控制路径流,导致数据损坏。

+0

感谢您的输入,看到我的其他信息评论 – Obiwan