V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
documentzhangx66
V2EX  ›  程序员

看了站内很多不小心把数据库清空或误删数据的

  •  
  •   documentzhangx66 · 2022-07-11 18:06:44 +08:00 · 5550 次点击
    这是一个创建于 884 天前的主题,其中的信息可能已经有所发展或是发生改变。

    提个醒:

    1.一定要做数据库自动备份,至少每日一备份。 就是个脚本的事情,搜一下就完事了。

    2.除了查询外,做增删改之前,一定要备份一次。不要怕麻烦,不要怕耽误时间。 性能不够上固态,固态不够上内存盘。

    以上两点,没做好,是有可能吃牢饭的,没开玩笑。

    43 条回复    2022-07-13 09:36:07 +08:00
    zhzy0077
        1
    zhzy0077  
       2022-07-11 20:06:24 +08:00 via Android
    所有 dml/ddl 前要么 begin transaction 要么找人 review 一遍也很重要
    heyjei
        2
    heyjei  
       2022-07-11 21:02:55 +08:00
    @zhzy0077
    ddl 没有事务的吧
    moult
        3
    moult  
       2022-07-11 21:10:52 +08:00
    3 、不想动手就掏钱买云数据库吧,都有秒级回滚功能。
    rekulas
        4
    rekulas  
       2022-07-11 21:17:20 +08:00
    提到的 2 点没意见,最后一句不敢苟同,似乎没有过这种案例吧
    kingjpa
        5
    kingjpa  
       2022-07-11 22:16:10 +08:00
    自己玩的项目还好,
    生产数据库备份一次要多久,以及会不会锁表,没试过吗?
    cpstar
        6
    cpstar  
       2022-07-11 22:26:27 +08:00   ❤️ 1
    我倒是没有删库,就是 update 的时候忘了 where ,而已,而已,而已。。。多大点事
    shench
        7
    shench  
       2022-07-12 03:00:41 +08:00
    有些软件不小心对某个表按了一下 del 键,一会儿运行的时候这个表就这么没了。。。。我碰到过两次
    Chad0000
        8
    Chad0000  
       2022-07-12 07:44:00 +08:00 via iPhone
    数据是最宝贵的,我选择使用云上的服务,回滚到任意秒没什么压力。其他可以自己搞。
    xubingok
        9
    xubingok  
       2022-07-12 08:18:40 +08:00
    @Chad0000 云数据库这么屌吗...是每秒备份一次?
    l4ever
        10
    l4ever  
       2022-07-12 08:22:11 +08:00
    总结的不错, 刚入行的新手可以看看.
    老手就一笑而过了.
    micean
        11
    micean  
       2022-07-12 08:27:55 +08:00
    动生产库养成建表存变动数据的习惯
    bthulu
        12
    bthulu  
       2022-07-12 08:39:37 +08:00
    @xubingok 云数据库可设置成每事务备份一次, 可确保任何情况下数据不丢失
    Chad0000
        13
    Chad0000  
       2022-07-12 08:40:53 +08:00 via iPhone
    @xubingok 不需要时时备份,mysql 云数据库定时备份➕binlog ,可以恢复到任意时刻。云商自带功能。
    hay313955795
        14
    hay313955795  
       2022-07-12 09:00:05 +08:00
    .....垃圾项目表很大了咋办..
    ila
        15
    ila  
       2022-07-12 09:04:07 +08:00 via Android
    克隆个 dev 数据库,放脱敏后的数据,操作无误,再用同个语句操作线上的
    liuliangyz
        16
    liuliangyz  
       2022-07-12 09:06:58 +08:00   ❤️ 1
    说明,你们这些系统基本都不是特别重要的系统。重要的系统不回搞什么脚本备份的,肯定是上数据库集群,硬件上就是多机热备,共享存储。同时存储也是硬件灾备。
    什么软件热备,手工备份,都是为了省成本高出来的软件方案。
    morty0
        17
    morty0  
       2022-07-12 09:15:40 +08:00
    3. 手动 commit
    zhw2590582
        18
    zhw2590582  
       2022-07-12 09:18:38 +08:00   ❤️ 1
    我就没有这种烦恼,因为我是前端
    jorneyr
        19
    jorneyr  
       2022-07-12 09:21:48 +08:00
    阶段全备,每日增备
    singerll
        20
    singerll  
       2022-07-12 09:32:43 +08:00
    性能不够上固态,固态不够上内存盘。
    抱歉,就是 dba ,我也没见有这么大权力的。
    Cmdhelp
        21
    Cmdhelp  
       2022-07-12 09:33:27 +08:00
    做好数据备份,真的很重要
    R18
        22
    R18  
       2022-07-12 09:35:00 +08:00
    我有点好奇, 200 多 G 的数据库该怎么备份.
    mywaiting
        23
    mywaiting  
       2022-07-12 09:42:13 +08:00
    OP 没有总结到点上啊,备份肯定没错,但备份只是挽救措施

    最关键的是:永远不要手动执行 SQL 语句~
    vone
        24
    vone  
       2022-07-12 09:44:33 +08:00
    nothingistrue
        25
    nothingistrue  
       2022-07-12 09:52:19 +08:00
    这两个提醒属于费工夫不讨好的提醒。

    用在生产库上没用:1 ,这种备份作用很有限,一天一备份间隔时间太长,热机备份不能直接用来恢复,冷机备份又要先停机; 2 ,啥都备份等于啥都没备份,这种备份压根没法用来恢复数据。

    用在个人库徒增工作量。

    对于在程序之外动生产库的操作,一减少二增加操作审查流程,要比上面的方式有效多了。
    dzdh
        26
    dzdh  
       2022-07-12 09:56:43 +08:00
    @heyjei mysql 8.0 有了。pgsql/oracle 是一直都有的
    xdzhang
        27
    xdzhang  
       2022-07-12 10:27:05 +08:00
    数据随时都在变,不实时你的备份有啥用。。。
    agdhole
        28
    agdhole  
       2022-07-12 10:29:20 +08:00
    rds 多机自动备份,充钱世界可及
    liuidetmks
        29
    liuidetmks  
       2022-07-12 11:08:08 +08:00
    @shench 什么破软件?,不过应该权限没设置好是根本原因吧
    woostundy
        30
    woostundy  
       2022-07-12 11:09:04 +08:00
    不可能,备份也是资源消耗。
    heyjei
        31
    heyjei  
       2022-07-12 11:41:50 +08:00
    @dzdh 多谢纠正。
    Zach369
        32
    Zach369  
       2022-07-12 14:31:55 +08:00
    主从,集群....
    fangdaidai
        33
    fangdaidai  
       2022-07-12 16:37:48 +08:00
    @rekulas 破坏计算机信息系统罪了解下
    Tounea
        34
    Tounea  
       2022-07-12 16:49:36 +08:00
    想问下各位数据库备份频率是怎么样的?是每天增备还是每天全备?数据库小还好说,要是数据库容量特别大呢?
    adoal
        35
    adoal  
       2022-07-12 16:57:17 +08:00
    @xdzhang 有实时备份可以完整恢复当然好,但如果数据被破坏了又没办法完整恢复回来,要承担经济甚至法律责任时,丢失一天的数据跟跟全丢的责任轻重还是大不一样的,这时候有 daily backup 对当事人来说当然有用
    neptuno
        36
    neptuno  
       2022-07-12 17:17:56 +08:00
    1 、测试环境多测试几遍 sql 2 、线上运行前,找人 review 。(站内那几个案例,感觉都是连测试都没测过,直接线上手写 sql ,肯定会出问题)
    james2013
        37
    james2013  
       2022-07-12 17:55:16 +08:00
    理论上备份是好的
    实际使用时,生产库表的数据很多,有的表 1 张都很大,备份一次时间都不知道要多久呢,要是多改几次数据,1 天就没有了,哪里这么规范呢
    rekulas
        38
    rekulas  
       2022-07-12 18:00:54 +08:00
    @vone
    @fangdaidai
    破坏罪我知道,但这是主观破坏跟答主提到的备份不当导致事故是两回事,虽然理论上这种可能会被判因玩忽职守造成重大损失从而触发法律,但实际生活很难看到具体案例
    rekulas
        39
    rekulas  
       2022-07-12 18:21:13 +08:00
    另外就算是不小心删库导致的事故,目前暂时也未看到判决案例,目前看到的基本都是主观破坏性删除定罪的。
    对于非主观事故,可能也有责任但不清楚该适用什么罪,玩忽职守罪肯定不对那是机关工作的
    xdzhang
        40
    xdzhang  
       2022-07-13 08:07:13 +08:00
    @adoal 最初的时候我也是每天备份一次,后来发现不行,没多大保障,又快照,发现快照还是不行,现在我做实时备份。主要清理起来真的太恼火了,也不是说前面的不行,也是必须做的,尽量减少损失。
    awen233333
        41
    awen233333  
       2022-07-13 08:12:26 +08:00
    update 或 delete 的时候加个 top 或者 limit 限制要更新的数量,并将要更新的那几行数据备份,Oracle 手动 commit
    vone
        42
    vone  
       2022-07-13 09:17:47 +08:00
    @rekulas 仔细看链接哈,那人是运维,在系统出现生产问题后,尝试使用私下开发的运维程序处理问题导致的事故。

    他被认为主观的原因是:1 、私自使用未经授权的管理员账号; 2 、事故后使用 360 安全卫士清理过软件垃圾和软件使用痕迹(被认为是隐瞒犯罪事实)。
    yc8332
        43
    yc8332  
       2022-07-13 09:36:07 +08:00
    你怕是没见过大生产数据库吧。知道备份一次要多久吗?根本做不到 1 日 1 备份。。都是几天 1 备,有问题时间近的用 binlog 恢复。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3731 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 79ms · UTC 05:21 · PVG 13:21 · LAX 21:21 · JFK 00:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.