MySQL 数据库的备份与恢复
数据库的备份与恢复,一直都是DBA最为重要的工作,任何生产环境的数据库都必须有完整的备份方案与恢复测试。本小节将主要介绍MySQL的备份与恢复。
1. 备份的理由
备份重于一切!备份是DBA最后一根救命稻草……以下几个是数据库备份的重要理由:
- 灾难恢复
系统总是要崩溃的,服务器总是要发生故障的,甚至于机房被烧毁、黑客攻击,如果发生这些情况时,没有有效的备份,只能等死。
- 操作失误
开发人员在修改某些数据后,发现操作失误,需要恢复这些数据。
- DB审计
有时候需要知道数据库在过去某个时间点有什么样的数据。
- 测试环境
开发人员需要定期用最新的生产数据库的数据恢复至测试环境,用于开发验证。如果有备份,那就很简单,直接用备份文件还原到测试环境即可。
2. 恢复需求的定义
在规划备份和恢复的策略时,有两个指标需要考量:RPO和RTO。
-
RPO(恢复点目标): Recovery Point Objective,可以容忍丢多少数据
-
RTO(恢复时间目标): Recovery Time Objective,需要等待多久才将数据恢复
在定义具体的RPO和RTO时,我们需要明确以下问题:
- 可以容忍丢失多少数据?
- 可以容忍多长时间内恢复正常服务?哪种类型的宕机是可以接受的?部分服务不可用是否可以接受?
- 需要恢复什么?单表/部分表?整个数据库?还是整个服务器?
3. 备份方案的设计
将RPO和RTO定义清楚,可以更好地指导备份策略。一般来说,能承受的数据丢失越多,备份就越简单。
一个好的备份方案,需要考量以下几点:
- 对于较大数据库(个人经验是整个数据文件大于50GB),物理备份是必须的,备份工具Percona XtraBackup和MySQL Enterprise Backup是比较好的选择。对于较小的数据库,逻辑备份就可以满足备份需求,备份工具mysqldump是比较好的选择;
- 确保MySQL的log-bin选项是打开的,有了binlog,MySQL才能做完整的恢复、基于时间点的恢复、以及基于位置的恢复;
- 备份二进制日志,用于故障时间点的恢复;
- 在存储资源许可的条件下,保留足够多的备份集;
- 定期从备份中进行恢复测试;
- 需确保备份文件是有效的,是可以恢复的;
- 通过恢复演练,测算恢复锁需要的实际时间,以及所需要的资源,如CPU、磁盘空间、内存、网络等。
4. 小结
本小节主要介绍了MySQL恢复需求的定义和备份方案的设计,备份和恢复在任何数据库都是非常重要的部分,好的备份方法和策略,会使数据库备份更高效也更安全。
重要的事情说三遍:
备份重于一切!
备份重于一切!
备份重于一切!