MySQL数据备份与恢复

247 阅读3分钟

「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战

理解备份恢复

MySQL使用环境中,基本都会搭建高可用架构最基本的主从,当主库发生故障导致无法使用的时,可以切换从节点提供服务。

那如果:

  • 删除操作:DROP TABLE操作 ,在Row模式下,可以通过binlog进行恢复,那再如果DROP DATABASE,那就无法恢复了。

  • 在一次迁移升级过程中,bug导致数据库无法启动

  • 需要找回前两天的数据

  • 云平台全面瘫痪,虽然出现概率很小

这时可以通过之前备份+binlog进行恢复数据。

备份的目的是发生灾难时进行恢复。

为了保证有效备份,需要考虑备份的扩展性以及用于备份有效性验证的服务器,还需要配合多种备份机制

  • 建设统一的备份服务器,备份服务器仅从本地机房实例进行数据备份

  • 备份异常时,需要有相应的处理机制保障下一次备份能够正常进行

  • 逻辑 物理备份 镜像结合进行备份

对于恢复,没有恢复的备份是无意义的,所以需要:

  • 建设统一的恢复验证服务器,用于定期验证备份有效性

  • 通过定期恢复演练,确保备份的有效性

  • 由于不可能所有备份都通过实际还原的方式进行校验,使用文件MD5对比方式进行每日基础校验

备份恢复工具

MySQL方面各种备份手段: 备份恢复实现方式包含 物理 逻辑 商业软件 虚拟机的整体备份。

img

常用的备份工具有三个: 逻辑导出:mysqldump,msyqlpump,mydumper 物理导出:xtrabackup。

1.mysqldump - MySQL 自带的逻辑备份工具。

备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的SQL语句,当需要还原这些数据时,只要执行这些SQL语句,即可将对应的数据还原。

2.xtrabackup是一款mysql开源备份(物理备份)工具,是由percona公司开发的。

3.mydumper是一个针对MySQL和Drizzle的高性能多线程备份和恢复工具,能多线程进行备份。

1.数据量少于10G以内使用mydumper,mysqldump 进行备份,其他备份建议xtrabackup。 2.除了以上场景单表备份,表结构等导出的时候,建议使用逻辑导出。 3.mysqldump是单线程 mydumper是多线程,性能来说mydumper更优。 性能方面:mysqlpump>mydumper>mysqldump 但mysqlpump存在一些bug。

4.除此之外MySQL8.0的clone功能确实非常不错的功能,需要脚本配合,应该比xtrabackup优秀,就是业界使用经验太少。

备份策略

对于不同的数据,可以采取不同的备份策略,结合全备和增量备份的方式,binlog也需要定期进行备份。

备份方面最佳实践

  • 使用xtrabackup进行物理备份

  • 使用mydumper进行逻辑备份(支持并行逻辑备份恢复)

  • 备份文件存储本地 或则 介质为NFS

  • 使用binlog2sql进行闪回恢复.

  • 对于重要系统,可以使用延迟从库进行备份恢复

img

  • 条件允许,系统级别每天额外每天进行镜像备份,之后再做去重处理。

备份恢复注意

常见的备份失败问题:

img