误删库后,除了跑路,还能做什么?

一、防微杜渐:

保护数据,不仅仅是DBA的事情,是每个开发人员都应该有的觉悟;

先要做好预防,可以通过一下几个点:

  • 1.权限控制与分配(数据库和服务器权限)
  • 2.制作操作规范
    • a. 脚本完善:备份脚本、执行脚本、验证脚本、回滚脚本
  • 3.定期给开发进行培训
  • 4.搭建延迟备库
  • 5.做好sql审计,只要是对线上数据有更改操作的语句(DML和DDL)都需要进行审核
  • 6.做好备份。备份的话又分为两个点.
    • a. 如果数据量比较大,用物理备份xtrabackup。定期对数据库进行全量备份,也可以做增量备份。
    • b. 如果数据量较少,用mysqldump或者mysqldumper。再利用binlog来恢复或者搭建主从的方式来恢复数据。
  • 7.定期备份binlog文件也是很有必要的
  • 8.定期检查备份文件是否可用,如果真的发生了误操作,需要恢复数据的时候,发生备份文件不可用,那就更悲剧了

二、亡羊补牢

如果发生了数据删除的操作,又可以从以下几个点来恢复:

  • 1.DML误操作语句造成数据不完整或者丢失。可以通过flashback,不过我们目前用的是美团的myflash,也是一个不错的工具,本质都差不多.都是先解析binlog event,然后在进行反转。把delete反转为insert,insert反转为delete,update前后image对调。所以必须设置binlog_format=row 和 binlog_row_image=full.
    切记恢复数据的时候,应该先恢复到临时的实例,然后在恢复回主库上。

  • 2.DDL语句误操作(truncate和drop),由于DDL语句不管binlog_format是row还是statement.在binlog里都只记录语句,不记录image所以恢复起来相对要麻烦得多。只能通过全量备份+应用binlog的方式来恢复数据。一旦数据量比较大,那么恢复时间就特别长。

你可能感兴趣的:(MySQL)