You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

主从架构下如何使用mariabackup备份单个数据库?

基于MariaBackup优化主从架构下多数据库备份方案

针对你提到的大数据库场景替换mysqldump、主从架构+多套不同备份频率的需求,MariaBackup确实是非常合适的选择——它支持热备份、增量备份,对业务影响极小,完全适配MariaDB/MySQL的主从环境。下面结合你的场景给出具体的优化思路和实操建议:

一、核心适配方向梳理

先把你的场景拆解成几个关键适配点,避免走弯路:

  • 主从节点分工:优先在从节点执行备份,彻底避开占用主库的IO和CPU资源;如果从节点存在延迟,可选择在主库做增量备份,但记得用--no-lock参数(InnoDB为主的库可实现无锁热备)
  • 多备份频率适配:需6小时备份的库,采用「全量备份+增量备份」组合来减少备份体积和时间;每日备份的库如果数据量不大可直接做全量,数据量大的话可以每周全量+每日增量
  • 多库隔离策略:如果是独立的数据库实例,每个实例单独配置备份脚本;如果是同一实例下的多库,用--databases指定要备份的库,避免冗余备份无关数据

二、贴合场景的备份命令示例

假设你已经执行了基础的全量备份操作,这里补充适配你需求的命令细节:

1. 从节点全量备份(最推荐的方式)

mariabackup --backup \
  --target-dir=/backup/full_$(date +%Y%m%d_%H%M) \
  --user=backup_user --password=your_backup_pass \
  --host=slave_server_ip --port=3306

重要提示:备份完成后必须执行以下命令完成备份文件的准备,确保备份集可直接用于恢复:

mariabackup --prepare --target-dir=/backup/full_xxx

2. 6小时频率的增量备份

基于最近一次全量备份做增量,大幅减少备份体积:

mariabackup --backup \
  --target-dir=/backup/incr_$(date +%Y%m%d_%H%M) \
  --incremental-basedir=/backup/full_20240520_0000 \
  --user=backup_user --password=your_backup_pass \
  --host=slave_server_ip

每次增量都要基于上一次的备份(全量或增量),恢复时需要按时间顺序合并全量和所有增量备份

3. 同一实例下的多库指定备份

如果只需要备份特定数据库,不用备份整个实例:

mariabackup --backup \
  --databases="order_db user_db" \
  --target-dir=/backup/order_user_full_$(date +%Y%m%d) \
  --user=backup_user --password=your_backup_pass

三、自动化备份脚本建议

针对两种备份频率,分别编写脚本并通过crontab定时执行:

1. 6小时增量备份脚本(crontab 每6小时触发一次)

#!/bin/bash
BACKUP_USER="backup_user"
BACKUP_PASS="your_backup_pass"
SLAVE_HOST="slave_server_ip"
BASE_BACKUP_DIR="/backup"

# 自动找到最新的全量备份目录
LATEST_FULL_BACKUP=$(ls -d $BASE_BACKUP_DIR/full_* | sort -r | head -1)
# 创建当前增量备份的目录
CURRENT_INCR_DIR="$BASE_BACKUP_DIR/incr_$(date +%Y%m%d_%H%M)"

# 执行增量备份
mariabackup --backup \
  --target-dir=$CURRENT_INCR_DIR \
  --incremental-basedir=$LATEST_FULL_BACKUP \
  --user=$BACKUP_USER --password=$BACKUP_PASS \
  --host=$SLAVE_HOST

# 提前合并增量到全量备份(可选,减少恢复时的操作)
mariabackup --prepare --target-dir=$LATEST_FULL_BACKUP --incremental-dir=$CURRENT_INCR_DIR

2. 每日全量备份脚本(crontab 凌晨低峰期执行)

#!/bin/bash
BACKUP_USER="backup_user"
BACKUP_PASS="your_backup_pass"
SLAVE_HOST="slave_server_ip"
BASE_BACKUP_DIR="/backup"
CURRENT_FULL_DIR="$BASE_BACKUP_DIR/full_$(date +%Y%m%d)"

# 执行全量备份
mariabackup --backup \
  --target-dir=$CURRENT_FULL_DIR \
  --user=$BACKUP_USER --password=$BACKUP_PASS \
  --host=$SLAVE_HOST

# 准备全量备份集
mariabackup --prepare --target-dir=$CURRENT_FULL_DIR

# 自动清理7天前的旧全量备份(按需保留天数)
find $BASE_BACKUP_DIR/full_* -type d -mtime +7 -exec rm -rf {} \;

四、主从架构下的恢复注意事项

  • 如果从节点故障,可将备份恢复到新节点,然后通过主库的binlog追平到最新数据,快速重建主从关系
  • 恢复增量备份时,必须先准备全量备份,再按时间顺序依次合并所有增量备份,最后应用binlog到指定时间点
  • 备份完成后一定要定期做恢复测试,别等故障发生才发现备份集不可用

内容的提问来源于stack exchange,提问作者KevinP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:46:29