
不小心 where 条件搞错了 删了一堆的数据
mysql 5.6 的 innodb 数据库 日志模式 mixed
尝试用 mysqlbinlog 导出了下 deldete 发现只是记录了 delete 那个语句 没有数据
有没有具体的教程 网上的好杂乱 不敢乱弄了
1 opengps 2018-09-06 14:44:11 +08:00 无论能不能恢复,现在第一时间要做的事是完整备份一下,然后抓紧用备份恢复的数据库研究 |
2 sbmzhcn 2018-09-06 14:44:35 +08:00 先把现场备份,然后再准备恢复尝试,如果失败了,还能还原。如果是 VPS 可以把整个 VPS 备份下。 一定要先备份再操作。 |
3 maowenjie OP 目前数据都导出备份了 |
4 lcorange 2018-09-06 14:49:51 +08:00 看看有没有历史的备份点,数据库备份,硬盘快照什么任何的备份点。 然后从那个时间点开始捋所有 binlog,然后在备份点的库上,重跑到目前为止所有 binlog 的 sql |
5 Perterually 2018-09-06 15:02:45 +08:00 删除之前先 select 查看一下。。。 |
6 maowenjie OP 已经恢复了 数据库前几天建的 中午操作删除的 所以直接把前几天到中午的数据重新恢复遍 把数据库删了 然后 /usr/local/mysql/bin/mysqlbinlog -d mydata --start-datetime='2018-09-04 08:00:00' --stop-datetime='2018-09-06 08:00:00' /usr/local/mysql/var/mysql-bin.000012>/home/mydata.sql 导出 sql 再把 sql 命令行倒回去 |
7 maowenjie OP 看了删除记录 手残啊 where id>19232 变成了 where id>1923 |
8 ruihe 2018-09-06 15:16:55 +08:00 你是不小心删了,我是前两天发现我司有个人删除数据用的是 delete 语句,瞬间无语…… |
9 okjb 2018-09-06 15:17:55 +08:00 via Android 删库到跑路,我以为一直开玩笑,没想到 v 友果然牛皮 |
14 poliapo 2018-09-06 16:10:34 +08:00 现在谁还删数据啊 不都是软删除 给字段 |
15 batter 2018-09-06 16:22:34 +08:00 我一直觉得 delete 是非常脑残的,奈何产品经理是个洁癖,觉得这些应该删除的数据是脏数据,,,,,,, |
16 PythonAnswer 2018-09-06 16:26:50 +08:00 via iPhone 除非对文件大小有要求 别删东西啊 |
17 loveCoding 2018-09-06 16:28:23 +08:00 @cncqw #10 都是逻辑删除啊.. |
19 zr8657 2018-09-06 16:45:12 +08:00 2018 还有真删的? |
20 PerFectTime 2018-09-06 16:49:30 +08:00 @cncqw #10 delete_remark 了解一下 |
22 infra 2018-09-06 17:00:41 +08:00 跑路吧,修复不了的 |
23 neutrino 2018-09-06 17:02:17 +08:00 一直真删,不要抱着侥幸心理。 |
24 Raymon111111 2018-09-06 17:02:53 +08:00 binlog 重来一次呗 |
25 liuhanghang 2018-09-06 17:03:55 +08:00 现在都是软删除吧 is_delete |
26 zhouren93 2018-09-06 17:09:49 +08:00 开启 binlog 了么,有的话可以恢复 |
27 luofan004 2018-09-06 17:25:03 +08:00 你们都不看前面楼么,别人楼主已经用 binlog 恢复了,都散了吧。。 |
28 cncqw 2018-09-06 17:42:52 +08:00 软删除只能算更新,跟删除有什么关系?说现在不用物理删除数据的可能只是你们的业务规模太小,当然删不删都无所谓,我做移动广告分析每天产生几千万条数据,你们软删除一个给我试试,真是无语。。 |
29 cncqw 2018-09-06 17:53:33 +08:00 我 3 年前做的项目就已经用上 delete_at 字段了,所以我猜楼上那些教我怎么删除的应该都是 phper,怎么讲,一种认为自己很懂但实际很 low 的感觉扑面而来,很符合 php 这门语言的气质 |
30 KgM4gLtF0shViDH3 2018-09-06 18:19:42 +08:00 via iPhone @cncqw #28 恼羞成怒 |
31 fleam 2018-09-06 18:21:39 +08:00 via iPhone 和语言有个毛关系…… |
32 paicha PRO deleted_at |
34 JohnZorn 2018-09-06 18:27:05 +08:00 php: 人在家中坐,锅从天上来 |
35 nananqujava 2018-09-06 1827:14 +08:00 删除数据不用 delete 语句,一般数据都很少 |
36 liuguang 2018-09-06 20:05:10 +08:00 跑路吧,除非按日志恢复,估计搞死人,drop database 然后跑路。。。 |
37 ballshapesdsd 2018-09-06 20:30:03 +08:00 @bestkayle #30 人家说的有啥不对 |
38 KgM4gLtF0shViDH3 2018-09-06 20:34:48 +08:00 又 block 了几个人,好开心 |
40 zeraba 2018-09-06 21:08:21 +08:00 via Android mixed delete 的话 binlog 只记录删除的这一条 sql 你可以看到了,没法从 binlog 恢复 只能从历史备份恢复,之后如果性能没问题,数据又重要还是 row 吧 还有就是多做备份 有备无患 |
41 zhihhh 2018-09-06 21:14:19 +08:00 哈哈上面 show is_delete 的好好笑。忍不住了。 |
42 zcjwxf 2018-09-07 00:32:13 +08:00 新当年我也 delete 过一次,还没加 where 那种,幸亏那张表最近没变化 |
43 dearmymy 2018-09-07 00:40:37 +08:00 之前也删过。还好用阿里云的数据库,有备份 |
44 IllBeBack 2018-09-07 04:47:34 +08:00 1. Select * from ... 2. Delete from ... 先 select 再 delete,后面都一样,复制粘贴就可以。 严格按这个顺序,一般不会出问题。 |
45 metrxqin 2018-09-07 06:23:34 +08:00 via iPhone 根据业务需求来决定只不执行物理删除。 |
46 msg7086 2018-09-07 07:51:50 +08:00 ermmm 人家的明文密码啊信用卡号啊身份证号啊手机号啊这些你们都是永久保存的? 贵国的程序员真是可怕。 |
47 lcdxiangzi 2018-09-07 08:15:15 +08:00 via Android 一切抛开业务场景的技术谈论都是瞎比比 |
48 lcdxiangzi 2018-09-07 08:17:46 +08:00 via Android 上次是存身份证图片,这次是逻辑删除 |
49 59php 2018-09-07 08:45:39 +08:00 在进行数据库操作之前,首先要做的就是备份一下数据 当然数据库过于巨大的工资的话,应该会有自己的备份机制 |
50 keymao 2018-09-07 09:01:46 +08:00 is_delete... 其实还是看数据规模吧 那种每天在线几百人的 数据产出小的 就没所谓了 数据量大的 不物理删除 等着数据服务器炸掉么... |
51 wanwaneryide 2018-09-07 09:03:32 +08:00 你需要买一本书:从删库到跑路。() |
52 leonnew 2018-09-07 09:07:05 +08:00 还恢复啥。。跑路呗 |
53 ccl945 2018-09-07 09:12:45 +08:00 via Android 什么鬼,产品经理管天管地数据库模型也要管,这还干个毛,拿起椅子上 |
54 batter 2018-09-07 09:20:31 +08:00 @keymao 我不太明白,如果数据量巨大,每天新增上亿的数据量,难道还用数据库来做操作吗?数据库不是作为最后的留存使用吗?不应该是分布式存储,况且我们采集的存储的数据不应该是需要 delete 数据极少数,占比不会超过千分之一甚至十万分之一吧,如果真的需要按照日期删除,难道不应该是按照日期分表,然后去删除表吗?菜鸟一枚,勿喷 |
55 Marmot 2018-09-07 09:27:40 +08:00 做不做物理删除看情况决定吧,说实话,敏感数据,还真没有几个公司是删除了的 顺便楼上那个炮轰的 php 的,笑死我了,php 真的是人在家中坐,锅从天上来 |
56 liuguang 2018-09-07 09:31:24 +08:00 select * from table where deleted_at is not null; |
57 jydeng 2018-09-07 09:35:42 +08:00 可以从日志恢复嘛,不是很了解。 公司用 Oracle,可以从日志恢复。 |
58 nosay 2018-09-07 09:38:27 +08:00 via iPhone @cncqw 稍微翻了一下你以往的回复记录,回复最多的恐怕就是 php 相关的讨论,我猜你可能是一名 phper,至少曾经是的。而你竟然可以把 phper 变成侮辱性词汇,真是讽刺,已 block |
59 llvm 2018-09-07 09:54:04 +08:00 MySQL 有闪回工具 |
60 CoderGeek 2018-09-07 10:05:52 +08:00 日志 sql |
61 weizhen199 2018-09-07 10:48:59 +08:00 该做 log 备份了 |
62 moregun 2018-09-07 11:35:27 +08:00 嗯 命令行是比图形界面方便 |
63 sampeng 2018-09-07 12:31:37 +08:00 恩。相信我。你以后一定在操作删除操作的时候瑟瑟发抖。。 delete 的时候。一定要加一个 limit。。。 |
64 likuku 2018-09-07 12:33:18 +08:00 via iPhone 没有有效的备份,那么请节哀 |
65 gaMe5hGLc86G4U52 2018-09-07 12:38:01 +08:00 设置个 isDelete 字段,逻辑删除,默认 0,逻辑删除更新值为 1 |
66 zeroliu 2018-09-07 13:39:14 +08:00 呃 为啥不试试先锁表,然后根据备份搭建主从,然后开启复制 start ...到 delete 之前呢?不过这个情况需要你的备份里面有 binlog file 和 position 信息或者是 gtid 信息吧,还有就是明确的知道你这个 delete 的 position 信息啊 |
67 xiaoyang7545 2018-09-07 13:58:12 +08:00 逻辑删除还是用 delete 还是需求决定的吧,楼上那些纠结这个的真的可笑啊。而且贴主这个还不一定是在程序环境中,可能是清理数据呢。 |
68 xionghongzhi 2018-09-07 14:10:17 +08:00 @IllBeBack 我一般都是这样用 |
69 xionghongzhi 2018-09-07 14:13:06 +08:00 都是些玻璃心 |
70 di1012 2018-09-07 14:28:20 +08:00 sql server 中的 truncate 删除了解下,敢这么用的人一定是和公司有仇的 |
72 bigtwo 2018-09-07 14:49:58 +08:00 看着楼上各位的逻辑,终于感受到无责任心的公司为啥这么多了 |
73 codebigbang 2020-06-18 19:13:32 +08:00 抛开业务场景谈技术实现,跟抛开计量谈毒性一样,都是耍流氓。(逃~ |