hello2dj / blog

一些总结文章
27 stars 1 forks source link

删库的前因后果 #53

Open hello2dj opened 5 years ago

hello2dj commented 5 years ago

​ 2019年9月3号上午 12 点,误删了线上数据库。1点左右使用当天凌晨 00:30 的数据库备份恢复,丢失了 00:30 到 1 点之间的数据。

​ "蝴蝶效应","明知山有虎偏向虎山行"

​ 起因是这个时间段对项目进行了重写,需要数据迁移。本来是有测试库的,但由于一些问题,测试库无法使用(灾难的伏笔),因此在线上 mongod 建立了测试库。这意味着线上数据库与测试数据库都在一起(灾难的前奏)。我在进行迁移测试的时候,对测试库使用了一个和线上库很相近的名字 (灾难的预兆)。我在测试完成以后,想要删除测试库,误把线上库当成了测试库 (灾难的发生) 删除了。

  1. 凡是可能出错的事就一定会出错 (墨菲定律)。
  2. 无论什么情况下,都不要把测试库和线上数据库放在一起。
  3. 加前缀 vs 加后缀: winner 加前缀。
  4. 数据库的重要操作例如删除数据库的权限一定要收缩。
  5. 如果两个东西有必要进行区分那就一定要非常不同
  6. 数据库备份,尝试增量备份,尽量缩短备份时间,若要求 RPO 为零的情况下可以做 实时数据备份
    1. 已有服务提供商:各种数据库厂商,Dell EMC
    2. 专门的云服务
  7. 明确 恢复及时性(RTO) 以及 恢复时间点 (RPO) wiki 概念
  8. 开发人员在操作数据库是一次只能打开一个数据库连接
  9. 备份,备份,备份,RPO == 0 > RPO == N > RPO == 无限