主从架构下如何使用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
相关产品推荐
相关产品推荐

