Mysql数据库表行消失

时间:2010-03-02 10:55:10

标签: mysql

最近发生了一个非常奇怪的(对我来说)问题。在接受用户提交的数据的应用程序中,随机发生以下情况:

存储用户提交数据的数据库表中的行disappearing

请注意除了INSERT语句之外,数据库表上没有发出DELETE,DROP,TRUNCATE或其他SQL语句。

这可能是Mysql的错误吗?做了一些关于mysql.com(论坛,错误等)的研究,发现了2个类似的案例,但没有得到可靠的答案(只是建议)。

您可能会觉得有用的一些信息: 存储引擎:InnoDB 已清理用户提交的数据并检查SQL注入尝试

感谢任何建议,信息。

的问候,

4 个答案:

答案 0 :(得分:3)

以下是3种可能性:

  1. 数据首先从未进入数据库。其他地方发生了一些事情,所以数据消失了。可能是间歇性网络问题,服务器超载,应用程序错误。

  2. 未提交数据库事务,并已回滚。也许您的应用程序代码中存在一个错误,可能是某些无效数据搞砸了,可能发生了并发异常等。

  3. mysql中的错误。

  4. 我先看看1.和2.

答案 1 :(得分:2)

您只有insert(并且可能是select)且永远不会updatedelete的表格应该真正稳定。您是否完全确定您是否正在彻底保护SQL injection攻击?因为那些(当然)可以删除行等,如果成功的话。

你还没有提到你正在使用哪个表引擎(有几个),但是值得在桌面上运行它所有的诊断工具。例如,在MyISAM表上运行myisamchk。或者更通用(这适用于多种表类型),使用CHECK TABLE语句。

您是否遇到过底层存储的问题?值得检查一下。

答案 2 :(得分:0)

另外一个案例来满足上述要求。也可能存在应用程序的客户端和服务器端部分。可以使用其他代码逻辑在服务器端处理客户端启动的更改。

例如,在我们的例子中,本地管理面板使用pay_date = NULL更新了订单信息,并且php-website处理了此表以清除此表中的逾期订单。由于php逻辑是由另一个程序员开发的,当订单更新导致记录在一段时间后消失时,它看起来很奇怪。

同样指的是crone操作,在日程安排中处理mysql数据库。

答案 3 :(得分:0)

激活binlog并定期监视DELETE查询有助于识别罪魁祸首。