V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mebtte
V2EX  ›  问与答

MySQL update 忘写 where 能恢复吗?

  •  1
     
  •   mebtte · 2020-10-30 10:17:41 +08:00 · 3515 次点击
    这是一个创建于 1274 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言  ·  2020-10-30 11:02:15 +08:00
    没开 binlog
    第 2 条附言  ·  2020-10-30 19:53:03 +08:00
    反正都要跑路, 一不做, 二不休, 已经删库了[狗头]
    31 条回复    2020-10-31 10:31:51 +08:00
    2088TXT
        1
    2088TXT  
       2020-10-30 10:25:33 +08:00
    可以把这个指令 kill 掉
    goodboy95
        2
    goodboy95  
       2020-10-30 10:30:22 +08:00
    不好说,如果恰好有时间点之前的备份倒简单,没备份或者备份太久远的话,从操作日志一点一点推出数据吧
    SingeeKing
        3
    SingeeKing  
       2020-10-30 10:31:01 +08:00   ❤️ 2
    搜索关键词:binlog + redolog
    wql
        4
    wql  
       2020-10-30 10:38:32 +08:00 via Android
    binlog
    boris93
        5
    boris93  
       2020-10-30 10:40:41 +08:00 via Android
    always SELECT before UPDATE
    dilu
        6
    dilu  
       2020-10-30 10:51:07 +08:00   ❤️ 10
    教你个巧:操作线上 DB,一定要先用 screen 这种开个窗口,然后开事务,操作完成之后一定要 select 验证一下,确定没问题之后再 commit 。不管多简单的操作都这样搞,保证你不会出错。
    clf
        7
    clf  
       2020-10-30 10:51:46 +08:00
    用 Mysql Binlog 做回滚?当然咯,数据库没开 binlog 就没法操作了。
    xiangyuecn
        8
    xiangyuecn  
       2020-10-30 11:06:30 +08:00
    不用想,99%也没有备份。

    两种选择:
    1. 承担不起就不动声色立即跑路
    2. *****
    newtype0092
        9
    newtype0092  
       2020-10-30 11:07:19 +08:00
    @dilu 听起来就像有故事的老哥,学到了~
    lxk11153
        10
    lxk11153  
       2020-10-30 11:10:18 +08:00
    rm -rf 吧,没救了[doge]
    PiersSoCool
        11
    PiersSoCool  
       2020-10-30 11:15:15 +08:00
    MySQL 在数据库层面应该可以设置拒绝这种 Global Update 的操作的,建议打开禁止,一般没有什么业务需求会需要全局更新
    mebtte
        12
    mebtte  
    OP
       2020-10-30 11:17:46 +08:00
    @PiersSoCool 我也想到这个, 有必要禁止一下
    fanfpy
        13
    fanfpy  
       2020-10-30 11:26:30 +08:00
    我好像干过这事,当时吓的一身冷汗,
    telung
        14
    telung  
       2020-10-30 11:28:15 +08:00
    Wow, 收拾东西跑路吧
    leafre
        15
    leafre  
       2020-10-30 11:30:00 +08:00
    线上数据库能给你 update ?
    twg
        16
    twg  
       2020-10-30 11:38:20 +08:00
    我好想也干过,还好是不重要的字段,领导帮我瞒下来了,当时慌得一笔
    dilu
        17
    dilu  
       2020-10-30 11:40:37 +08:00
    @newtype0092 用 screen 是有一次一个老哥操作线上 DB 开了事务后断网,之前的会话不能恢复也没有提交导致线上锁表(跟代码中的 for update 冲突导致),开事务是因为又一次跟你一样,update 没有写 where......
    cheng6563
        18
    cheng6563  
       2020-10-30 12:04:47 +08:00
    @dilu 连接断开会直接回滚吧。
    cheng6563
        19
    cheng6563  
       2020-10-30 12:06:11 +08:00
    update 一般感觉慢了就强行断开连接把,最好事先开事务。如果用阿里云网页版的 DMS 那就直接凉。
    terence4444
        20
    terence4444  
       2020-10-30 12:08:21 +08:00 via iPhone
    mysql workbench 似乎默认禁止无主键 update
    dilu
        21
    dilu  
       2020-10-30 12:26:16 +08:00
    @cheng6563 傻孩子,没有开自动提交,并且 for update 然后代码里面的逻辑也对这行进行了 for update,一系列巧合造成了这个线上事故,我们的服务直接挂了一整个上午。断开后不会自动回滚的。
    mmdsun
        22
    mmdsun  
       2020-10-30 12:47:30 +08:00 via Android
    @dilu @cheng6563 断开不会回滚?

    set global innodb_lock_wait_timeout 设置超时也可以回滚吧
    dilu
        23
    dilu  
       2020-10-30 13:31:59 +08:00 via Android
    @mmdsun 害,就是没有早知道啊要是能早知道还能出事故嘛
    CismonX
        24
    CismonX  
       2020-10-30 13:54:59 +08:00
    还好我们操作线上 DB 都要走主管审批,EXPLAIN 扫描行数超过一定数量还会有 DBA 二次审批

    binlog 永久留存,而且所有 alter 操作都是克隆原表后进行操作
    chioplkijhman
        25
    chioplkijhman  
       2020-10-30 14:05:43 +08:00
    曾经迟到了,于是 telnet 到打卡机想改个考勤,数据库 update 忘了 where 。。。于是。。。
    xsm1890
        26
    xsm1890  
       2020-10-30 15:56:05 +08:00
    lxk11153
        27
    lxk11153  
       2020-10-30 18:43:41 +08:00
    @hellomrjia #25 技术考勤,666
    dswyzx
        28
    dswyzx  
       2020-10-30 18:51:47 +08:00
    一般来这这么问的,也都是已经没路子走了,老大哥们提的建议都很好,但都是亡羊补牢.
    晚上吃顿好的吧
    namelosw
        29
    namelosw  
       2020-10-30 19:12:47 +08:00 via iPhone
    该吃吃该喝喝.

    下辈子注意点就行了.
    afx
        30
    afx  
       2020-10-31 00:49:26 +08:00 via iPhone
    @fanfpy 我也干过,从那以后落下一个毛病,update 打完立刻跟着就是 where.
    darrenfang
        31
    darrenfang  
       2020-10-31 10:31:51 +08:00
    update 先写 where 条件,再写 set
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1268 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 23:58 · PVG 07:58 · LAX 16:58 · JFK 19:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.