MySQL数据“误”删“攻防”战

2014-11-24 17:40:56 · 作者: · 浏览: 1

相信各位线上都可能遇到过或者听到过数据被应用程序“误”删,可能因为拼SQL导致谓词为永真删除或者更新了全部数据?或者虚惊一场?因此,面对这种情况我们要能:


1.“攻”:如何防止这种情况发生


2.“守”:如何发生了怎么办


对于“攻”:


因为我们是MySQL,主要拿MySQL举例:


1.sql_safe_update:当设置为1时


对于update:如果谓词没有索引并且没有limit会被拒绝


对于delete:如果谓词永真或为空,或者谓词没有索引并且没有limit被拒绝


其实这两点对于oltp来说是很有意义的


2.在driver/proxy层面上进行过滤


可以嵌入规则引擎到driver(比如druid)或者proxy(比如cobar)中,这样更灵活,可配置.


3.超时自动kill,对于OLTP来说如果要死就早死早超生,也叫fail fast,如果当真一个大语句update/delete很久产生的后果也是很可怕的,真要是这样还不如直接kill掉(当然更优雅的是上面的方式,直接就根据规则拒绝掉)


4.流程自动/规范化


SQL上线流程,测试环境自动化规范化


对于“守”:


0.定期备份和有效性测试是必须的,这个是底线


1.可以创建延迟复制:


这个方法就很多了,pt-slave-delay/tungsten-replicator/blabla...


2.MySQL Flashback:


http://mysql.taobao.org/index.php/Patch_source_code#Add_flashback_feature_for_mysqlbinlog


各位小伙伴们欢迎补充J


相关阅读