DBA 的最核心的工作就是保证数据的完整性,先要做好预防,预防的话大概是通过这几个点:
权限控制与分配(数据库和服务器权限)
制作操作规范
定期给开发进行培训
搭建延迟备库
做好 SQL 审计,只要是对线上数据有更改操作的语句(DML和DDL)都需要进行审核
做好备份。备份的话又分为两个点 (1)如果数据量比较大,用物理备份 xtrabackup。定期对数据库进行全量备份,也可以做增量备份。(2)如果数据量较少,用 mysqldump 或者 mysqldumper。再利用 binlog 来恢复或者搭建主从的方式来恢复数据。定期备份binlog 文件也是很有必要的
如果发生了数据删除的操作,又可以从以下几个点来恢复:
DML 误操作语句造成数据不完整或者丢失。可以通过 flashback,美团的 myflash,也是一个不错的工具,本质都差不多
都是先解析 binlog event,然后在进行反转。把 delete 反转为insert,insert 反转为 delete,update前后 image 对调。
所以必须设置binlog_format=row 和 binlog_row_image=full,切记恢复数据的时候,应该先恢复到临时的实例,然后在恢复回主库上。
DDL语句误操作(truncate和drop),由于DDL语句不管 binlog_format 是 row 还是 statement ,在 binlog 里都只记录语句,不记录 image 所以恢复起来相对要麻烦得多。
只能通过全量备份+应用 binlog 的方式来恢复数据。一旦数据量比较大,那么恢复时间就特别长
rm 删除:使用备份跨机房,或者最好是跨城市保存。