MariaDB 的物理热备工具
mariadb-backup 是 MariaDB 官方的物理热备工具,与 Percona XtraBackup 同源(早期为 xtrabackup 分支),保留备份、准备、回写三段式流程。它在备份期间复制数据文件与 redo 日志,因此可以不长时间阻塞写入。它只服务 MariaDB,备份产物与 MySQL 不通用。
基本信息
| 适用平台 | MariaDB 10.x 全系列,随发行版包提供 |
|---|---|
| 三段式流程 | --backup 备份,--prepare 应用日志,--copy-back 回写 |
| 与 PXB 关系 | 同源分支,参数名高度相似但行为有差异 |
| 权限要求 | RELOAD、PROCESS、LOCK TABLES、REPLICATION CLIENT 及数据目录读权限 |
| 流式备份 | --stream=mbstream,可配合管道与压缩做远程备份 |
| 产物兼容 | 不能被 MySQL 使用,反之亦然 |
典型使用场景
- MariaDB 实例的大体量全量备份,要求备份期间不停机
- 用增量备份与压缩控制备份存储成本
- 从备份快速拉起测试实例做回归验证
- 定期恢复演练,核对备份是否真的可用
- 同版本迁移 MariaDB 实例到新主机
全备加增量
全备加增量
# 全备(每周)
mariadb-backup --backup --target-dir=/data/backup/full \
--user=backup --password='占位口令'
# 增量(每日):基于全备或上一次增量
mariadb-backup --backup --target-dir=/data/backup/inc1 \
--incremental-basedir=/data/backup/full --user=backup --password='占位口令'
# 准备:全备与中间增量加 --apply-log-only,最后一个增量不加
mariadb-backup --prepare --apply-log-only --target-dir=/data/backup/full
mariadb-backup --prepare --target-dir=/data/backup/full --incremental-dir=/data/backup/inc1
# 恢复:停库、回写到空目录、修正属主、启动
systemctl stop mariadb
mariadb-backup --copy-back --target-dir=/data/backup/full
chown -R mysql:mysql /var/lib/mysql && systemctl start mariadb
# 备份账号最小授权示例
# GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backup'@'localhost';四个阶段要点
| 阶段 | 命令 | 要点 |
|---|---|---|
| 备份 | --backup --target-dir | 在线复制数据文件与 redo 日志 |
| 增量 | --backup --incremental-basedir | 依赖上一次备份目录作为基准 |
| 准备 | --prepare [--apply-log-only] | 应用 redo 使数据达到一致状态 |
| 回写 | --copy-back | 目标目录必须为空,之后修正属主 |
| 流式 | --stream=mbstream | 管道传给压缩或远程存储 |
MariaDB 与 MySQL 8 的数据字典、临时表与权限模型差异很大,备份参数的经验可以借鉴,但结论不能照搬:目录结构、恢复步骤与权限设置都以 MariaDB 官方文档为准。
跨机器备份用流式模式最省事:--stream=mbstream 把备份写到标准输出,管道交给压缩程序或直接送到远端主机,避免先在本地落盘再搬运;恢复端同样用 --extract 解包。备份用户的口令建议通过 mysql_config_editor 或配置文件的 [client] 段提供,避免出现在命令行历史与进程列表里。