【发布时间】:2015-05-07 10:29:02
【问题描述】:
我在 InnoDB (MySQL 5.5.7.-FreeBSD) 上有几个 DDBB。 5年来我没有任何问题。我意识到定期检查表,优化,...
神秘的是,其中一个数据库的表从 70 行中丢失了 20 行(删除!)。这些行是几年前插入的。它们之间没有关系(随机 ID)。这是一张很小的桌子。
经过几个小时的研究(和谷歌),我还没有找到原因。我已经通过上次备份恢复了信息。
我检查过:
WEB APP:
1) 应用程序没有 DELETE 语句,只有 SELECT 或 UPDATE。
2) 没有 DELETE ON CASCADE,没有外键。
2) 受保护的 SQL INJECT。
3) 没有应用管理表(如phpMysqlAdmin)。
4) 我的应用日志没有显示在这些时间内尝试攻击或访问。
MYSQL:
1)所有行的验证都是直接在mysql控制台中进行的,没有使用APP。
2) mysqlcheck:受影响的表中没有错误。
3) Mysqldump:不转储消失的行,只转储剩余的行。
4) 错误日志:没有注册错误。
5) table.idb 文件不包含丢失的记录,只包含剩余的行。
6) mysql 用户只能在本地访问(通过 IP)。
服务器:
1) 任何人都访问过服务器。
2) HDD 或控制器上没有发生错误。
3) 我没有在系统日志中看到事件。
显然一切都是正确的。我不知道发生了什么。
我想到了两个选择:
1) MySQL 5.5.7 中的一个错误???
2) 在记录丢失的几个小时内,我正在导入(在不同的数据库上)数百万的 INSERT 和 DELETE。我不认为这个激烈的过程已经损坏(没有痕迹)另一个数据库中的另一个表。
我担心它是否会再次发生!
谢谢!
更新 1 @pala_ 建议我查阅 bin-log(我没看过!)。
在 bin-log 中有 20 个带有著名 DELETE 的查询!
我粘贴 bin-log:
(...)
BEGIN
/*!*/;
# at 83069675
# at 83069772
# at 83070746
# at 83071672
# at 83072677
#150505 12:29:18 server id 168291 end_log_pos 83069772 Table_map: `affected_database`.`affected_table` mapped to number 583255
#150505 12:29:18 server id 168291 end_log_pos 83070746 Delete_rows: table id 583255
#150505 12:29:18 server id 168291 end_log_pos 83071672 Delete_rows: table id 583255
#150505 12:29:18 server id 168291 end_log_pos 83072677 Delete_rows: table id 583255
#150505 12:29:18 server id 168291 end_log_pos 83073123 Delete_rows: table id 583255 flags: STMT_END_F
### DELETE FROM affected_database.affected_table
### WHERE
### @1=xxxxxxx
### @2=xxxxxxxx
### @3=xxxxxxxxxx
### @4=xxxxxxxxx
### @5=xxxxxxxxx
### @6=xxxxxxxxx
### @7=xxxxxxxxxx
### @8=xxxxxxxxx
### @9=xxxxxxxxxx
### @10=xxxxxxxxxxxx
### @11=xxxxxxxxxxx
### @12=xxxxxxxxxxx
### @13=xxxxxxxxxxx
### @14=xxxxxxxxxxx
### @15=xxxxxxxxxxx
### @16=xxxxxxxxxxx
### @17=xxxxxxxxxxx
### @18=xxxxxxxxxxx
### @19=xxxxxxxxxxx
### @20=xxxxxxxxxxx
### @21=xxxxxxxxxxx
### @22=xxxxxxxxxxx
### @23=xxxxxxxxxxx
### @24=xxxxxxxxxxx
### DELETE FROM affected_database.affected_table
### WHERE
(...) x20
它是如何运行的?
谢谢
【问题讨论】:
-
sql-server 是与 mysql 不同的数据库 - 如果不需要,请不要标记它。您是否启用了二进制日志记录?如果是这样,请检查是否通过查询实际删除了行
-
你很快!我正在编辑以删除标记,因为我看到提到 Microsoft SQL Server。谢谢!
-
请记住,REPLACE INTO 语句可能会在与新值replace-into-think-twice 冲突时删除行,请提供表的结构(如果有)。
-
我用 bin-log 更新了帖子。奇怪的是,DELETE 查询显示。
-
你查看过general_log吗?