很多人都有过线上操作数据库的经历,大一点的公司可能有层层审核,小公司就直接上去就是干了,而我,就在这样的小公司。
手一抖,直接把用户的充值记录干没了,虽然最后从备份恢复了,但是也扣了工资,还通报了。。。
痛定思痛,开始学习怎么避免这种情况。。。
定期备份
别管多大的库,都要有备份,而且要定期备份,哪怕有个从库,至少不会提桶。。
如果是小表,比如是配置表,可以先克隆一个表出来备份。
测试服先试试
如果条件允许,现在测试服环境试一下,别太自信。。。
别用聊天工具直接发SQL
尤其是长SQL,用文本,最好也别换行,你自己校验的时候换行看都行,发出去最好别换行。
操作前select先
比如我要把所有的订单状态改一下,就先查出来,看是不是对的,然后再写update语句。
分批操作
大事务的执行最好都分批,不然会锁表。不管是删除还是更新。
加字段
- is_delete:即软删除。给自己留一个机会。
- update_time:可以找出来自己影响了哪些行,方便修复。
- update_user:如果有多个人操作数据库,最好加上。
表名前面加库名
如果业务中分了库,一定要记得加库名,因为很多表名都可能重复,一不小心就。。。
默认值
很多线上加了一个字段,不加默认值,就insert失败了。。。
不允许直接删字段
这个大公司应该还好,都会走流程、DBA审查之类的。小公司就不一定了,一问都没用,那就直接删吧。。。
首先是确定所有代码中都没有用,其次要在测试服先测,最后要在停服维护的时候,把要删的字段统计一下,一起删。
改字段
- 改名字,不允许,这和删字段有啥区别。
- 改类型,走测试,和版本一起上线。
- 改长度,最好别,设计的时候干嘛去了,浪费了就浪费了把。