在已有数据基础上实施mysql主从复制备份
新到公司不久,事故起因于另一开发人员,在实施定期手工备份时,误将导出
操作为导入
,使数据库被还原于上一次(约半个月前)导出的数据。
经过查实,发现我们所使用的mysql竟没有开启binlog备份,无从还原。
这半个月的数据本来就来之不易,更何况作为初创公司,简直致命,如果无法还原,公司很可能面临关门。
幸好,因为使用的是阿里云服务器,它每天定时备份,使得可以将大部分数据恢复。
至此,该实施自动化备份了。
自动化备份方案选择:
- A: 自动定时export数据进行备份(简单粗暴,无法完整恢复)
- B: 使用binlog,实时备份数据(简单可用,无法灾难恢复)
- C: 使用master-slave,实时双机备份数据(比较靠谱,双机保障)
- D: 主主复制(目前没这个必要)或一主多从等其它方案(初创公司资源不多,虽然阿里云机器也不贵)
综上,采用了方案C:
- 参考官方文档
- 在docker上模拟场景(主要是已有数据基础上及数据恢复)进行主从复制研究测试,确保理解无误,方案正确
- 整理整个操作流程[1],确保思路清晰正确
- 将大部分操作shell化并测试无误,方便实施时直接使用,避免手误
- 选定数据操作最少时间段实施方案
- 虽然模拟场景并测试充分,但方案实施时依然遇到一个插(wen)曲(ti):出现check-sum问题。
- 原因:我只查看了master机器的mysql版本为5.5.19,于是模拟场景也是基于master和slave都是这个版本进行测试,然而slave上的版本是5.4,无此特性。最后,直接升级slave版本到5.519解决之。
至此,方案实施完成,并在随便几天连续确认状态是否正常。
总结
- 线上数据库部署时,切记开启自动备份机制。
- 初创公司一般无运维,开发人员应当承担起这份责任。
- 作为开发者,尽可能让所有可自动化的事情自动化,高效之道也。
-
操作流程图