这两天有个特别火的事情,段子竟然成真了!微盟公司有个运维人员人员,因为个人原因,把公司的数据库删个精光,整个网站崩溃,因此,微盟公司估计大跌近10个亿。程序员删库到跑路,这个我们以前常说的段子,没想到又一次在现实中发生了!在今天早些时候,微盟已经宣布新用户已经恢复使用,而旧用户的数据将在28号前恢复。数据库对于一个系统,就好比一个建筑的根基,数据库被删库,就好比摩天大楼的支持柱损坏。既然数据库这么重要,那么,我们这么保证数据库的安全,防止数据被删除呢?
曾经有人这么想,如果我杭州的支付宝的数据库炸了,那么我们是不是可以不用还花呗了。答案显然不可能,在现实的生产环境中,我们很少只使用一个数据库,通常一台机器会发生单点故障,那样子系统的可用性明显就不高。在生产环境中,我们通常会使用多个数据库,有些是主库的备份,如果这个备份只是当主库发生故障的时候用来应急,我们称之为冷备。每次数据库的变更操作,都会同步到备库,假如主库发生故障,我们可以切换到备库,这样子用户几乎没有感知到后台发生过如此惊险的事情。所以,假如程序员或者运维人员恶意摧毁数据的硬件,或者删除数据,假如不是通过数据库命令,就不会被同步到备库上,这个时候,程序员只能删库失败。
image
假如数据真的是被程序员使用数据库命令删除地,并且已经同步到备库上,这个时候该怎么办呢?一般情况下,我们的数据库都是有离线备份的,也就是每天三更半夜的时候,都会把前一天的存量数据打包起来,放到别的机器上,以备不时之需。那么对于今天才产生的新数据,怎么处理呢?基本上,每个数据库操作都有日志,例如我们最常用的Mysql,就有binlog,在我们日常每次操作数据库的时候,都会写下一条对应的日志,所以,我们只要取昨天的离线数据,然后回放今天的数据即可。
那么如何保证数据库的安全呢?
1.限制帐户权限,核心的数据库,一般都不能随便分配写权限,想要获取写权限需要审批,并且,不同的账号,不同的数据之间要进行权限分离,避免一个账号可以删除所有库。
2.定期进行演练,进行数据恢复,一旦发生故障,也可以安然自若,不必惊慌失措。
3.最重要的,还是要善待员工,不要天天加班,开车都不能疲劳驾驶,何况是开数据库的。多给程序员放点工资,介绍女朋友,让他对生活充满信息,毕竟对生活有信心的人,才不会去铤而走险。