最近发生了一个非常奇怪的(对我来说)问题。在接受用户提交的数据的应用程序中,随机发生以下情况:
存储用户提交数据的数据库表中的行disappearing
。
请注意除了INSERT语句之外,数据库表上没有发出DELETE,DROP,TRUNCATE或其他SQL语句。
这可能是Mysql的错误吗?做了一些关于mysql.com(论坛,错误等)的研究,发现了2个类似的案例,但没有得到可靠的答案(只是建议)。
您可能会觉得有用的一些信息: 存储引擎:InnoDB 已清理用户提交的数据并检查SQL注入尝试
感谢任何建议,信息。
的问候,
答案 0 :(得分:3)
以下是3种可能性:
数据首先从未进入数据库。其他地方发生了一些事情,所以数据消失了。可能是间歇性网络问题,服务器超载,应用程序错误。
未提交数据库事务,并已回滚。也许您的应用程序代码中存在一个错误,可能是某些无效数据搞砸了,可能发生了并发异常等。
mysql中的错误。
我先看看1.和2.
答案 1 :(得分:2)
您只有insert
(并且可能是select
)且永远不会update
或delete
的表格应该真正稳定。您是否完全确定您是否正在彻底保护SQL injection攻击?因为那些(当然)可以删除行等,如果成功的话。
你还没有提到你正在使用哪个表引擎(有几个),但是值得在桌面上运行它所有的诊断工具。例如,在MyISAM表上运行myisamchk
。或者更通用(这适用于多种表类型),使用CHECK TABLE
语句。
您是否遇到过底层存储的问题?值得检查一下。
答案 2 :(得分:0)
另外一个案例来满足上述要求。也可能存在应用程序的客户端和服务器端部分。可以使用其他代码逻辑在服务器端处理客户端启动的更改。
例如,在我们的例子中,本地管理面板使用pay_date = NULL更新了订单信息,并且php-website处理了此表以清除此表中的逾期订单。由于php逻辑是由另一个程序员开发的,当订单更新导致记录在一段时间后消失时,它看起来很奇怪。
同样指的是crone操作,在日程安排中处理mysql数据库。
答案 3 :(得分:0)
激活binlog并定期监视DELETE查询有助于识别罪魁祸首。