数据库,逻辑删还是物理删?
相信很多人都听过删库跑路
这个词,用搜索引擎检索删库跑路
,可以看到很多程序员删库跑路的讨论和新闻。
但是,严格来讲,大部分程序员想删库跑路
也做不到。为什么呢?因为没有数据库的删除权限。——真正能删库跑路
的是运维,再准确点DBA。
那么平时业务中的删除是怎么做的呢?答案是逻辑删除
。
逻辑删除:又名软删除,与物理删除、硬删除相对应,含义是并没有实际的删除数据,只是将数据标记已删除
(例如增加is_deleted字段)。
为什么要用逻辑删除?
物理删除
很好理解,就是真的把数据给删了。
以MySQL为例,假如数据删了,应该怎么恢复呢?主要方式有两种。
利用 binlog 日志
binlog是记录所有数据库表结构变更(例如CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE、DELETE…)的二进制日志。
使用binlog恢复数据,本质上就是通过binlog找到所有DML操作,去掉错误的SQL语句,然后执行其它的SQL语句,就可以将数据恢复。
binlog恢复数据示意图如下:
可以看到,恢复时候不仅需要停掉数据库,假如数据量大的话,去筛选恢复数据sql就