You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何排查MariaDB插入数据后自动删除全部行的原因

排查MariaDB中数据自动缓慢删除的问题

执行以下语句将2500万行数据从一个库复制到另一个同结构表:

INSERT INTO db122.link_table
SELECT * FROM db119.link_table

插入耗时约8小时,过程正常完成,但之后2-3天内数据会缓慢自动删除,最终db119.link_table变为空表。

环境:MariaDB 10,InnoDB存储引擎,自动提交开启,目标库/表无触发器,通过phpMyAdmin执行语句。

已排查:通用日志仅记录初始插入语句,通用日志和错误日志中无删除语句或报错信息,无法定位原因。

排查步骤

  • 开启二进制日志(binlog)
    通用日志可能未捕获所有数据变更操作,开启binlog可以记录所有DDL和DML语句。修改my.cnf/my.ini配置:

    log_bin = /var/log/mysql/mysql-bin.log
    binlog_format = ROW
    

    重启MariaDB后,后续所有数据变更都会被记录,通过mysqlbinlog工具解析日志,可定位删除操作的来源、时间点和具体语句。

  • 检查事件调度器状态
    排查是否存在定时事件执行删除逻辑,执行以下语句:

    SHOW VARIABLES LIKE 'event_scheduler';
    SHOW EVENTS;
    

    若event_scheduler为ON,逐一检查事件定义,确认是否有针对db119.link_table的定时清理规则。

  • 排查应用端操作
    确认是否有应用程序连接数据库执行批量删除:

    • 实时查看当前连接进程:SHOW PROCESSLIST;
    • 检查应用代码逻辑,是否存在误删、定时清理逻辑,或异常的批量数据操作。
  • 检查外键级联删除
    即使目标表无触发器,若db119.link_table存在外键关联,关联表数据删除可能触发ON DELETE CASCADE级联删除。执行以下语句查看外键配置:

    SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
    WHERE TABLE_SCHEMA = 'db119' 
      AND TABLE_NAME = 'link_table'
      AND REFERENCED_TABLE_NAME IS NOT NULL;
    
  • 监控表行数变化
    定时执行SELECT COUNT(*) FROM db119.link_table;,记录行数随时间的变化规律,判断删除是匀速持续进行还是阶段性批量操作,帮助缩小排查范围。

  • 检查备份/同步机制
    确认是否存在主从同步、定时备份恢复等操作,可能误将空表数据覆盖到db119.link_table:

    • 查看主从状态:SHOW SLAVE STATUS\G;
    • 检查备份脚本,确认是否有覆盖该表的逻辑。

内容的提问来源于stack exchange,提问作者Ian Kinsey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 11:26:04