代码之家  ›  专栏  ›  技术社区  ›  Andreas

mysql数据库表行消失

  •  1
  • Andreas  · 技术社区  · 16 年前

    最近发生了一个很奇怪的问题。在接受用户提交的数据的应用程序中,会随机发生以下情况:

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

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

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

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

    感谢任何建议和信息。

    当做,

    4 回复  |  直到 9 年前
        1
  •  2
  •   T.J. Crowder    16 年前

    一张只有你的桌子 insert (据推测 select 永远不会 update delete 应该是 真的? 稳定的。你确定你正在彻底保护 SQL injection 攻击?因为如果成功的话,它们当然可以删除行。

    您还没有提到您使用的是哪一个表引擎(有几个表引擎),但是无论有什么诊断工具,都值得运行。例如,在myisam表上,运行 myisamchk . 或者更一般地(这适用于多个表类型),使用 CHECK TABLE 语句。

    底层存储有问题吗?可能值得检查一下。

        2
  •  2
  •   nos    16 年前

    有三种可能性:

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

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

    3. MySQL中的一个错误。

    我看看1。2。第一。

        3
  •  0
  •   Zon    12 年前

    再加一个箱子来填满上面的内容。也可能存在应用程序的客户端和服务器端部分的情况。客户端发起的更改可以在服务器端用附加的代码逻辑进行处理。

    例如,在我们的例子中,本地管理面板更新了一个pay_date=null的订单信息,php网站处理了这个表来清理这个表中的过期订单。由于php逻辑是由另一个程序员开发的,当订单更新导致记录在一段时间后消失时,看起来很奇怪。

    这同样适用于crone操作,按计划处理mysql数据库。

        4
  •  0
  •   A Kunin    9 年前

    激活binlog并定期监视delete查询可以帮助识别罪魁祸首。