一段时间以来,我们一直在从我们的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)
“thrue一个自定义函数,修复所有SQL注入尝试。”这个功能究竟做了什么?为什么它首先需要 - .NET没有适当的卫生方法? (自定义功能非常频繁的罪魁祸首,当数据被搞砸了。) –
我们传递了“不安全”的数据被剥没有想HTML标记的自定义函数,替换某些字符像'''”与他们的HTML实体值。 我们已经使用了8年以上的函数,并且遇到了更新的经验问题,但是mysql的错误也是由简单的SP调用返回的情况下的99%,它只将int作为输入参数并进行简单的选择。在返回的错误看起来他们是完全不同的SQL查询。 也是事实的错误是“未知栏”,然后SQL代码,而不是列名混淆了我们很大的时间。 – Obiwan