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恢复需求的定义和备份方案的设计,备份和恢复在任何数据库都是非常重要的部分,好的备份方法和策略,会使数据库备份更高效也更安全。

重要的事情说三遍:

备份重于一切!

备份重于一切!

备份重于一切!