Skip to content

MariaDB 备份策略

备份策略概述

数据备份是数据库运维的重要组成部分,是保障数据安全和业务连续性的关键手段。制定合理的备份策略可以在数据丢失或损坏时快速恢复,减少业务中断时间和数据丢失风险。

备份策略需要考虑以下因素:

  • 数据重要性:不同业务数据的重要程度不同,备份策略应有所区别
  • 恢复目标:RTO(恢复时间目标)和 RPO(恢复点目标)
  • 备份类型:全量备份、增量备份、差异备份
  • 备份频率:根据数据变化频率和 RPO 要求确定
  • 备份存储:存储位置、介质、冗余和安全性
  • 备份验证:定期验证备份的完整性和可恢复性
  • 备份保留:根据合规要求和业务需要确定保留时间

备份类型

1. 按备份方式分类

物理备份

物理备份是直接备份数据库的物理文件,包括数据文件、日志文件和配置文件等。

特点

  • 备份和恢复速度快
  • 占用存储空间大
  • 支持热备份和冷备份
  • 恢复后不需要重建索引

工具

  • mariabackup:MariaDB 官方备份工具,支持热备份
  • xtrabackup:Percona 开发的备份工具,支持 InnoDB 热备份
  • cp/tar:适用于冷备份

适用场景

  • 大规模数据库备份
  • 对 RTO 要求高的场景
  • 需要快速恢复的场景

逻辑备份

逻辑备份是通过 SQL 语句导出数据库对象和数据,生成可读的 SQL 文件。

特点

  • 备份文件小,可读性强
  • 备份和恢复速度慢
  • 支持选择性备份和恢复
  • 跨版本兼容性好

工具

  • mysqldump:MariaDB 官方备份工具
  • mydumper:高性能逻辑备份工具
  • SELECT INTO OUTFILE:导出数据到文件

适用场景

  • 小规模数据库备份
  • 需要选择性恢复的场景
  • 跨版本迁移
  • 开发和测试环境

2. 按备份范围分类

全量备份

全量备份是备份数据库的所有数据和对象,包括表结构、数据、索引等。

特点

  • 备份内容完整
  • 恢复简单,只需要一个备份文件
  • 占用存储空间大
  • 备份时间长

适用场景

  • 作为增量备份和差异备份的基础
  • 数据量较小的数据库
  • 定期全量备份作为灾难恢复的基础

增量备份

增量备份是备份自上次备份以来发生变化的数据。

特点

  • 备份文件小,备份时间短
  • 恢复复杂,需要全量备份和所有增量备份
  • 存储空间利用率高

适用场景

  • 数据变化频繁的数据库
  • 对 RPO 要求高的场景
  • 存储空间有限的场景

差异备份

差异备份是备份自上次全量备份以来发生变化的数据。

特点

  • 备份文件比增量备份大,但比全量备份小
  • 恢复比增量备份简单,只需要全量备份和最新的差异备份
  • 存储空间利用率比增量备份低

适用场景

  • 数据变化适中的数据库
  • 对恢复速度有一定要求的场景

3. 按备份状态分类

热备份

热备份是在数据库正常运行时进行的备份,不影响数据库的正常使用。

特点

  • 不影响业务运行
  • 备份期间数据库可以继续读写
  • 支持点时间恢复
  • 备份工具要求高

工具

  • mariabackup(InnoDB 热备份)
  • xtrabackup(InnoDB 热备份)

适用场景

  • 生产环境,需要 24x7 运行的数据库
  • 对业务中断敏感的场景

温备份

温备份是在数据库只读状态下进行的备份,备份期间数据库只能读取,不能写入。

特点

  • 备份期间数据库只读
  • 影响写入操作
  • 备份工具要求较低

工具

  • mysqldump --single-transaction(InnoDB 温备份)
  • FLUSH TABLES WITH READ LOCK(MyISAM 温备份)

适用场景

  • 允许短暂只读的场景
  • 混合存储引擎的数据库

冷备份

冷备份是在数据库完全关闭的状态下进行的备份。

特点

  • 备份期间数据库完全关闭
  • 影响所有数据库操作
  • 备份简单,可靠性高
  • 恢复速度快

工具

  • cp/tar(直接复制数据文件)

适用场景

  • 维护窗口内的备份
  • 测试环境
  • 小型数据库

备份策略设计

1. 确定 RTO 和 RPO

  • RTO(恢复时间目标):从数据丢失到恢复服务所需的最长时间
  • RPO(恢复点目标):允许丢失的数据量,即从上次备份到故障发生时的数据变化
业务类型RTO 要求RPO 要求建议备份策略
核心业务< 1小时< 15分钟全量备份 + 增量备份/差异备份,结合 Binlog 备份
重要业务< 4小时< 1小时全量备份 + 增量备份,结合 Binlog 备份
一般业务< 24小时< 4小时每日全量备份,结合 Binlog 备份
非核心业务< 72小时< 24小时每周全量备份,结合 Binlog 备份

2. 选择备份类型组合

方案 1:全量备份 + Binlog 备份

  • 备份频率:每日全量备份,实时 Binlog 备份
  • 优点:恢复简单,只需要全量备份和 Binlog
  • 缺点:全量备份占用存储空间大,备份时间长
  • 适用场景:数据量较小,变化频率适中的数据库

方案 2:全量备份 + 增量备份 + Binlog 备份

  • 备份频率:每周全量备份,每日增量备份,实时 Binlog 备份
  • 优点:存储空间利用率高,备份时间短
  • 缺点:恢复复杂,需要全量备份 + 所有增量备份 + Binlog
  • 适用场景:数据量较大,变化频率高的数据库

方案 3:全量备份 + 差异备份 + Binlog 备份

  • 备份频率:每周全量备份,每日差异备份,实时 Binlog 备份
  • 优点:恢复比增量备份简单,只需要全量备份 + 最新差异备份 + Binlog
  • 缺点:差异备份文件逐渐增大
  • 适用场景:数据量较大,对恢复速度有要求的数据库

3. 制定备份执行计划

示例备份计划

备份类型执行频率执行时间保留时间
全量备份每周日00:00-04:004 周
增量备份周一至周六00:00-02:001 周
Binlog 备份实时持续4 周
备份验证每周一02:00-04:00

4. 备份存储策略

存储位置

  • 本地存储:备份到本地磁盘,恢复速度快,但存在单点故障风险
  • 远程存储:备份到远程服务器或存储设备,提高可用性
  • 云存储:备份到云存储服务(如 AWS S3、阿里云 OSS),提供高可用性和可扩展性

存储介质

  • 磁盘:适合频繁访问的备份,备份和恢复速度快
  • 磁带:适合长期归档,存储成本低,但恢复速度慢
  • SSD:适合对备份和恢复速度要求高的场景,成本较高

冗余策略

  • 3-2-1 备份原则
    • 至少 3 份备份副本
    • 存储在 2 种不同的介质上
    • 至少 1 份备份异地存储

安全性

  • 加密:对备份文件进行加密,防止未授权访问
  • 访问控制:限制备份存储的访问权限
  • 定期轮换密钥:定期更换加密密钥

5. 备份验证策略

  • 完整性验证:验证备份文件的完整性,如使用校验和或哈希值
  • 可恢复性验证:定期测试恢复过程,确保备份可以成功恢复
  • 性能验证:监控备份和恢复的性能,优化备份策略

备份工具选择

1. mariabackup

mariabackup 是 MariaDB 官方的备份工具,基于 Percona XtraBackup 开发,支持 InnoDB 热备份。

特点

  • 支持热备份,不影响业务运行
  • 支持全量备份和增量备份
  • 支持压缩备份
  • 支持加密备份
  • 支持并行备份和恢复

用法

bash
# 全量备份
mariabackup --backup --target-dir=/backup/full --user=backup --password=backup_password

# 增量备份
mariabackup --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/full --user=backup --password=backup_password

# 准备备份
mariabackup --prepare --target-dir=/backup/full

# 恢复备份
mariabackup --copy-back --target-dir=/backup/full --datadir=/var/lib/mysql

2. mysqldump

mysqldump 是 MariaDB 内置的逻辑备份工具,适合小规模数据库备份。

特点

  • 支持选择性备份(数据库、表、视图等)
  • 生成可读的 SQL 文件
  • 跨版本兼容性好
  • 支持单事务备份(InnoDB)

用法

bash
# 备份单个数据库
mysqldump -u root -p database_name > database_name.sql

# 备份所有数据库
mysqldump -u root -p --all-databases > all_databases.sql

# 备份数据库结构,不包含数据
mysqldump -u root -p --no-data database_name > database_schema.sql

# 使用单事务备份(InnoDB)
mysqldump -u root -p --single-transaction database_name > database_name.sql

3. mydumper

mydumper 是一个高性能的逻辑备份工具,支持并行备份和恢复。

特点

  • 并行备份,速度快
  • 支持压缩备份
  • 支持一致性备份
  • 支持断点续传
  • 适合大规模数据库备份

用法

bash
# 备份数据库
mydumper -u root -p password -B database_name -o /backup/mydumper/ -c -t 4

# 恢复数据库
myloader -u root -p password -B database_name -d /backup/mydumper/ -t 4

4. Binlog 备份

Binlog 包含了数据库的所有变更记录,是实现 PITR(点时间恢复)的关键。

备份方法

bash
# 启用 Binlog
# 在 my.cnf 中添加
log_bin = /var/log/mysql/mariadb-bin

# 备份 Binlog
cp /var/log/mysql/mariadb-bin.* /backup/binlog/

# 使用 mysqlbinlog 恢复
mysqlbinlog /backup/binlog/mariadb-bin.000001 | mysql -u root -p

备份策略最佳实践

1. 分层备份策略

  • 核心层:包含核心业务数据,采用最高级别的备份策略
  • 重要层:包含重要业务数据,采用中级别的备份策略
  • 一般层:包含一般业务数据,采用基础备份策略
  • 临时层:包含临时数据,可采用最低级别的备份策略或不备份

2. 定期测试恢复

  • 定期进行恢复测试,验证备份的完整性和可恢复性
  • 记录恢复时间,评估 RTO 目标的达成情况
  • 测试不同场景的恢复,如全量恢复、增量恢复、PITR 等

3. 备份自动化

  • 使用脚本或工具自动化备份过程
  • 配置备份监控和告警,及时发现备份失败
  • 记录备份日志,便于审计和 troubleshooting

4. 优化备份性能

  • 选择合适的备份时间:在业务低峰期进行备份
  • 使用并行备份:提高备份速度
  • 启用压缩:减少备份文件大小,节省存储空间和传输时间
  • 优化数据库配置:如调整 InnoDB 缓冲池大小,提高备份速度

5. 备份安全

  • 限制备份用户权限:备份用户只需要最小必要权限
  • 加密备份文件:防止备份文件泄露
  • 定期轮换备份密钥:提高安全性
  • 限制备份存储的访问权限:只允许授权用户访问

6. 文档化备份策略

  • 详细记录备份策略,包括备份类型、频率、存储位置、保留时间等
  • 记录恢复流程和步骤
  • 更新备份策略文档,适应业务变化

常见问题(FAQ)

1. 如何选择合适的备份类型?

  • 根据数据库大小、业务需求、RTO 和 RPO 要求选择
  • 小规模数据库:全量备份 + Binlog 备份
  • 大规模数据库:全量备份 + 增量备份/差异备份 + Binlog 备份
  • 对恢复速度要求高:全量备份 + 差异备份 + Binlog 备份

2. 如何确定备份频率?

  • 根据数据变化频率和 RPO 要求确定
  • 核心业务:全量备份(每周)+ 增量备份(每天)+ Binlog 备份(实时)
  • 一般业务:全量备份(每天)+ Binlog 备份(实时)
  • 非核心业务:全量备份(每周)+ Binlog 备份(实时)

3. 如何优化备份性能?

  • 在业务低峰期进行备份
  • 使用并行备份
  • 启用压缩
  • 使用高性能存储设备
  • 优化数据库配置

4. 如何验证备份的有效性?

  • 完整性验证:使用校验和或哈希值验证备份文件的完整性
  • 可恢复性验证:定期测试恢复过程
  • 性能验证:监控备份和恢复的性能

5. 如何处理备份失败?

  • 配置备份监控和告警,及时发现备份失败
  • 检查备份日志,定位失败原因
  • 修复问题后重新执行备份
  • 必要时手动执行备份

6. 如何处理大规模数据库备份?

  • 使用物理备份工具(如 mariabackup)
  • 采用增量备份或差异备份
  • 使用并行备份
  • 考虑分库分表备份
  • 优化存储设备和网络

7. 如何实现跨数据中心备份?

  • 使用远程备份工具,如 rsync
  • 备份到云存储服务
  • 使用专线连接提高备份速度
  • 考虑异步备份,减少对生产环境的影响

8. 如何制定备份保留策略?

  • 根据合规要求(如 GDPR、SOX 等)确定保留时间
  • 考虑业务需求,如审计、数据分析等
  • 平衡存储空间成本和业务需求
  • 采用分层保留策略,近期备份保留时间长,远期备份保留时间短

版本差异

MariaDB 10.0 备份特性

  • 引入 Aria 存储引擎备份支持
  • mariabackup 功能相对简单
  • 不支持并行备份

MariaDB 10.1 备份特性

  • 增强了 mariabackup 功能
  • 支持 Galera Cluster 备份
  • 改进了 Binlog 管理

MariaDB 10.2 备份特性

  • 支持加密备份
  • 增强了并行备份功能
  • 改进了增量备份算法

MariaDB 10.3 备份特性

  • 支持压缩备份
  • 增强了备份验证功能
  • 改进了备份恢复性能

MariaDB 10.4 备份特性

  • 支持断点续传
  • 增强了备份监控功能
  • 改进了 Binlog 备份管理

MariaDB 10.5 备份特性

  • 支持更高效的压缩算法
  • 增强了云存储集成
  • 改进了备份策略管理

总结

制定合理的 MariaDB 备份策略是保障数据安全和业务连续性的关键。备份策略需要根据业务需求、数据重要性、RTO 和 RPO 要求来设计,选择合适的备份类型、工具和存储方式。

在实施备份策略时,需要注意以下几点:

  • 遵循 3-2-1 备份原则
  • 定期测试备份的完整性和可恢复性
  • 自动化备份过程,减少人为错误
  • 优化备份性能,减少对生产环境的影响
  • 确保备份的安全性,防止未授权访问
  • 文档化备份策略和恢复流程

通过合理的备份策略设计和实施,可以在数据丢失或损坏时快速恢复,减少业务中断时间和数据丢失风险,保障业务的连续性和稳定性。