› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
maowenjie
V2EX  ›  MySQL

求救 数据库里不小心 delete 数据怎么恢复

  •  
  •   maowenjie · Sep 6, 2018 · 15572 views
    This topic created in 2984 days ago, the information mentioned may be changed or developed.

    不小心 where 条件搞错了 删了一堆的数据

    mysql 5.6 的 innodb 数据库 日志模式 mixed

    尝试用 mysqlbinlog 导出了下 deldete 发现只是记录了 delete 那个语句 没有数据

    有没有具体的教程 网上的好杂乱 不敢乱弄了

    73 replies  •  2020-06-18 19:13:32 +08:00
    opengps
    opengps
    Sep 6, 2018
    1
    无论能不能恢复,现在第一时间要做的事是完整备份一下,然后抓紧用备份恢复的数据库研究
    sbmzhcn
    sbmzhcn
    Sep 6, 2018
    2
    先把现场备份,然后再准备恢复尝试,如果失败了,还能还原。如果是 VPS 可以把整个 VPS 备份下。 一定要先备份再操作。
    maowenjie
    maowenjie
    OP
    Sep 6, 2018
    3
    目前数据都导出备份了
    lcorange
    lcorange
    Sep 6, 2018
    4
    看看有没有历史的备份点,数据库备份,硬盘快照什么任何的备份点。
    然后从那个时间点开始捋所有 binlog,然后在备份点的库上,重跑到目前为止所有 binlog 的 sql
    Perterually
    Perterually
    Sep 6, 2018
    5
    删除之前先 select 查看一下。。。
    maowenjie
    maowenjie
    OP
    Sep 6, 2018
    6
    已经恢复了
    数据库前几天建的 中午操作删除的
    所以直接把前几天到中午的数据重新恢复遍
    把数据库删了 然后
    /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 命令行倒回去
    maowenjie
    maowenjie
    OP
    Sep 6, 2018
    7
    看了删除记录
    手残啊
    where id>19232
    变成了 where id>1923
    ruihe
    ruihe
    Sep 6, 2018
    8
    你是不小心删了,我是前两天发现我司有个人删除数据用的是 delete 语句,瞬间无语……
    okjb
    okjb
    Sep 6, 2018 via Android❤️2
    9
    删库到跑路,我以为一直开玩笑,没想到 v 友果然牛皮
    cncqw
    cncqw
    Sep 6, 2018
    10
    @ruihe

    删除数据不用 delete 语句,你告诉我怎么删,瞬间无语……
    ruihe
    ruihe
    Sep 6, 2018
    11
    @cncqw 难道不是把更新删除字段?
    zzf2017
    zzf2017
    Sep 6, 2018
    12
    @cncqw 他应该是说'软删除'吧。数据不是真的删了,只是改变它的某个表明删除的字段
    calming
    calming
    Sep 6, 2018
    13
    @cncqw 都是逻辑删除了老哥,谁还真的 delete 啊
    poliapo
    poliapo
    Sep 6, 2018
    14
    现在谁还删数据啊 不都是软删除 给字段
    batter
    batter
    Sep 6, 2018
    15
    我一直觉得 delete 是非常脑残的,奈何产品经理是个洁癖,觉得这些应该删除的数据是脏数据,,,,,,,😂😂
    PythonAnswer
    PythonAnswer
    Sep 6, 2018 via iPhone
    16
    除非对文件大小有要求 别删东西啊
    loveCoding
    loveCoding
    Sep 6, 2018
    17
    @cncqw #10 都是逻辑删除啊..
    Rizio
    Rizio
    Sep 6, 2018
    18
    @cncqw 一般是修改某个字段例如 flag,以这个字段判断这行数据是否为删除状态。
    zr8657
    zr8657
    Sep 6, 2018
    19
    2018 还有真删的?
    PerFectTime
    PerFectTime
    Sep 6, 2018
    20
    @cncqw #10 delete_remark 了解一下
    gabezhao
    gabezhao
    Sep 6, 2018
    21
    @ruihe 删除不用 delete 用什么呀???
    infra
    infra
    Sep 6, 2018
    22
    跑路吧,修复不了的
    neutrino
    neutrino
    Sep 6, 2018
    23
    一直真删,不要抱着侥幸心理。
    Raymon111111
    Raymon111111
    Sep 6, 2018
    24
    binlog 重来一次呗
    liuhanghang
    liuhanghang
    Sep 6, 2018
    25
    现在都是软删除吧 is_delete
    zhouren93
    zhouren93
    Sep 6, 2018
    26
    开启 binlog 了么,有的话可以恢复
    luofan004
    luofan004
    Sep 6, 2018
    27
    你们都不看前面楼么,别人楼主已经用 binlog 恢复了,都散了吧。。
    cncqw
    cncqw
    Sep 6, 2018
    28
    软删除只能算更新,跟删除有什么关系?说现在不用物理删除数据的可能只是你们的业务规模太小,当然删不删都无所谓,我做移动广告分析每天产生几千万条数据,你们软删除一个给我试试,真是无语。。
    cncqw
    cncqw
    Sep 6, 2018❤️3
    29
    我 3 年前做的项目就已经用上 delete_at 字段了,所以我猜楼上那些教我怎么删除的应该都是 phper,怎么讲,一种认为自己很懂但实际很 low 的感觉扑面而来,很符合 php 这门语言的气质
    KgM4gLtF0shViDH3
    KgM4gLtF0shViDH3
    Sep 6, 2018 via iPhone❤️2
    30
    @cncqw #28 恼羞成怒
    fleam
    fleam
    Sep 6, 2018 via iPhone
    31
    和语言有个毛关系……
    paicha
    paicha
    Sep 6, 2018
    32
    deleted_at
    Rizio
    Rizio
    Sep 6, 2018
    33
    @cncqw 嚯嚯嚯,来了来了
    JohnZorn
    JohnZorn
    Sep 6, 2018❤️1
    34
    php: 人在家中坐,锅从天上来
    soleils
    soleils
    Sep 6, 2018
    35
    删除数据不用 delete 语句,一般数据都很少
    liuguang
    liuguang
    Sep 6, 2018
    36
    跑路吧,除非按日志恢复,估计搞死人,drop database 然后跑路。。。
    ballshapesdsd
    ballshapesdsd
    Sep 6, 2018
    37
    @bestkayle #30 人家说的有啥不对
    KgM4gLtF0shViDH3
    KgM4gLtF0shViDH3
    Sep 6, 2018
    38
    又 block 了几个人,好开心
    ericls
    ericls
    Sep 6, 2018
    39
    @zr8657
    @ruihe
    @calming
    @batter
    @loveCoding

    有时候隐私条款会要求真正删除数
    zeraba
    zeraba
    Sep 6, 2018 via Android
    40
    mixed delete 的话 binlog 只记录删除的这一条 sql 你可以看到了,没法从 binlog 恢复 只能从历史备份恢复,之后如果性能没问题,数据又重要还是 row 吧 还有就是多做备份 有备无患
    zhihhh
    zhihhh
    Sep 6, 2018❤️1
    41
    哈哈上面 show is_delete 的好好笑。忍不住了。
    zcjwxf
    zcjwxf
    Sep 7, 2018
    42
    新当年我也 delete 过一次,还没加 where 那种,幸亏那张表最近没变化
    dearmymy
    dearmymy
    Sep 7, 2018
    43
    之前也删过。还好用阿里云的数据库,有备份
    IllBeBack
    IllBeBack
    Sep 7, 2018
    44
    1. Select * from ...
    2. Delete from ...

    先 select 再 delete,后面都一样,复制粘贴就可以。
    严格按这个顺序,一般不会出问题。
    metrxqin
    metrxqin
    Sep 7, 2018 via iPhone
    45
    根据业务需求来决定只不执行物理删除。
    msg7086
    msg7086
    Sep 7, 2018
    46
    ermmm 人家的明文密码啊信用卡号啊身份证号啊手机号啊这些你们都是永久保存的?
    贵国的程序员真是可怕。
    lcdxiangzi
    lcdxiangzi
    Sep 7, 2018 via Android
    47
    一切抛开业务场景的技术谈论都是瞎比比
    lcdxiangzi
    lcdxiangzi
    Sep 7, 2018 via Android
    48
    上次是存身份证图片,这次是逻辑删除😂
    koic
    koic
    Sep 7, 2018
    49
    在进行数据库操作之前,首先要做的就是备份一下数据
    当然数据库过于巨大的工资的话,应该会有自己的备份机制
    keymao
    keymao
    Sep 7, 2018
    50
    is_delete... 其实还是看数据规模吧 那种每天在线几百人的 数据产出小的 就没所谓了

    数据量大的 不物理删除 等着数据服务器炸掉么...
    wanwaneryide
    wanwaneryide
    Sep 7, 2018
    51
    你需要买一本书:从删库到跑路。(≖ᴗ≖)✧
    leonnew
    leonnew
    Sep 7, 2018
    52
    还恢复啥。。跑路呗
    ccl945
    ccl945
    Sep 7, 2018 via Android
    53
    什么鬼,产品经理管天管地数据库模型也要管,这还干个毛,拿起椅子上
    batter
    batter
    Sep 7, 2018
    54
    @keymao 我不太明白,如果数据量巨大,每天新增上亿的数据量,难道还用数据库来做操作吗?数据库不是作为最后的留存使用吗?不应该是分布式存储,况且我们采集的存储的数据不应该是需要 delete 数据极少数,占比不会超过千分之一甚至十万分之一吧,如果真的需要按照日期删除,难道不应该是按照日期分表,然后去删除表吗?菜鸟一枚,勿喷
    5oiR5piv5YK76YC8
    5oiR5piv5YK76YC8
    Sep 7, 2018
    55
    做不做物理删除看情况决定吧,说实话,敏感数据,还真没有几个公司是删除了的
    顺便楼上那个炮轰的 php 的,笑死我了,php 真的是人在家中坐,锅从天上来
    liuguang
    liuguang
    Sep 7, 2018
    56
    select * from table where deleted_at is not null;
    jydeng
    jydeng
    Sep 7, 2018
    57
    可以从日志恢复嘛,不是很了解。
    公司用 Oracle,可以从日志恢复。
    nosay
    nosay
    Sep 7, 2018 via iPhone
    58
    @cncqw 稍微翻了一下你以往的回复记录,回复最多的恐怕就是 php 相关的讨论,我猜你可能是一名 phper,至少曾经是的。而你竟然可以把 phper 变成侮辱性词汇,真是讽刺,已 block
    llvm
    llvm
    Sep 7, 2018
    59
    MySQL 有闪回工具
    CoderGeek
    CoderGeek
    Sep 7, 2018
    60
    日志 sql
    weizhen199
    weizhen199
    Sep 7, 2018
    61
    该做 log 备份了
    moregun
    moregun
    Sep 7, 2018
    62
    嗯 命令行是比图形界面方便
    sampeng
    sampeng
    Sep 7, 2018
    63
    恩。相信我。你以后一定在操作删除操作的时候瑟瑟发抖。。

    delete 的时候。一定要加一个 limit。。。
    likuku
    likuku
    Sep 7, 2018 via iPhone
    64
    没有有效的备份,那么请节哀
    gaMe5hGLc86G4U52
    gaMe5hGLc86G4U52
    Sep 7, 2018
    65
    设置个 isDelete 字段,逻辑删除,默认 0,逻辑删除更新值为 1
    zeroliu
    zeroliu
    Sep 7, 2018
    66
    呃 为啥不试试先锁表,然后根据备份搭建主从,然后开启复制 start ...到 delete 之前呢?不过这个情况需要你的备份里面有 binlog file 和 position 信息或者是 gtid 信息吧,还有就是明确的知道你这个 delete 的 position 信息啊
    xiaoyang7545
    xiaoyang7545
    Sep 7, 2018
    67
    逻辑删除还是用 delete 还是需求决定的吧,楼上那些纠结这个的真的可笑啊。而且贴主这个还不一定是在程序环境中,可能是清理数据呢。
    xionghongzhi
    xionghongzhi
    Sep 7, 2018
    68
    @IllBeBack 我一般都是这样用
    xionghongzhi
    xionghongzhi
    Sep 7, 2018
    69
    都是些玻璃心
    di1012
    di1012
    Sep 7, 2018
    70
    sql server 中的 truncate 删除了解下,敢这么用的人一定是和公司有仇的
    killerv
    killerv
    Sep 7, 2018
    71




    @nosay 这个人经历了什么?
    @cncqw
    bigtwo
    bigtwo
    Sep 7, 2018
    72
    看着楼上各位的逻辑,终于感受到无责任心的公司为啥这么多了
    codebigbang
    codebigbang
    Jun 18, 2020
    73
    抛开业务场景谈技术实现,跟抛开计量谈毒性一样,都是耍流氓。(逃~
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   688 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 111ms · UTC 20:57 · PVG 04:57 · LAX 12:57 · JFK 15:57
    ♥ Do have faith in what you're doing.