Debian系统下 MariaDB 数据库备份与恢复实战指南

一 常见备份方案概览
- 逻辑备份:使用 mysqldump 导出为 .sql 文件,适用于大多数 MariaDB 备份场景,支持跨版本迁移、按需恢复以及更细致的对象级控制。
- 自动化脚本:如 Automysqlbackup,可实现按日、周、月执行的自动备份策略,并具备清晰的目录结构,方便日常数据库运维管理。
- 物理热备:使用 Percona XtraBackup,能够在不停机的情况下完成热备份,支持增量备份与高效恢复,特别适合大规模数据库或高可用业务环境。
- 并行导出:使用 mysqlpump(可视为并行版 mysqldump),适合数据量较大的库,用于缩短导出时间、提升备份效率。
- 物理迁移:通过 LVM 快照或 rsync 直接复制数据目录,适合同版本环境下的整机迁移、快速恢复或重建实例。
二 逻辑备份与恢复步骤
- 备份
- 全库备份(含存储过程/触发器,不含数据):
mysqldump -u root -p --single-transaction --routines --triggers --no-data --databases db1 db2 > backup_full.sql - 单库结构与数据完整导出:
mysqldump -u root -p --single-transaction --routines --triggers mydb > mydb.sql - 仅导出数据或仅导出表结构:
mysqldump -u root -p --single-transaction mydb --no-create-info > mydb_data.sql
mysqldump -u root -p --single-transaction mydb --no-data > mydb_schema.sql - 排除部分表进行备份:
mysqldump -u root -p mydb --ignore-table=mydb.log_table1 --ignore-table=mydb.log_table2 > mydb_min.sql - 远程备份(使用配置文件保存连接凭据):
在 /etc/mysql/mariadb.conf.d/50-client.cnf 配置 [client] host/user/password 后执行:
mysqldump --defaults-extra-file=/etc/mysql/mariadb.conf.d/50-client.cnf mydb > mydb.sql
- 全库备份(含存储过程/触发器,不含数据):
- 恢复
- 目标数据库不存在时先创建数据库:
mysql -u root -p -e “CREATE DATABASE IF NOT EXISTS mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;” - 执行 SQL 脚本导入恢复:
mysql -u root -p mydb < mydb.sql - 跨服务器迁移恢复:
scp mydb.sql user@target:/path/
ssh user@target “mysql -u root -p mydb < /path/mydb.sql”
- 目标数据库不存在时先创建数据库:
- 自动化与保留策略
- 使用 Automysqlbackup:
sudo apt-get update && sudo apt-get install -y automysqlbackup
编辑 /etc/automysqlbackup/ 配置备份目录、用户、数据库与保留周期;可手动执行:sudo automysqlbackup;加入 cron(如每日 2:00):
0 2 * * * /usr/bin/automysqlbackup - 自定义脚本示例(含压缩并保留 7 天):
#!/bin/bash
BACKUP_DIR=“/srv/backup”
DB=“mydb”
FILE=“$BACKUP_DIR/${DB}$(date +%F).sql"
mysqldump --defaults-extra-file=/etc/mysql/mariadb.conf.d/50-client.cnf “$DB” > “$FILE”
gzip “$FILE”
find “$BACKUP_DIR” -name "${DB}*.sql.gz” -mtime +7 -delete
- 使用 Automysqlbackup:
三、XtraBackup的物理热备与恢复步骤
- 适用场景:适合需要业务不中断完成备份、支持增量备份以及要求快速恢复的大型 MariaDB/MySQL 数据库实例。
- 安装(Debian 常见版本):
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
sudo apt-get update
sudo apt-get install -y percona-xtrabackup-24(或对应版本) - 全量备份与准备
- 执行全量备份:
xtrabackup --backup --target-dir=/data/backups/full --user=backup --password=pwd - 准备备份(应用 redo 日志,使备份达到一致性状态):
xtrabackup --prepare --target-dir=/data/backups/full
- 执行全量备份:
- 恢复
- 停止数据库服务并清理原数据目录:
sudo systemctl stop mysql
sudo mv /var/lib/mysql /var/lib/mysql.old - 回拷数据文件:
xtrabackup --copy-back --target-dir=/data/backups/full - 修复目录权限并启动服务:
sudo chown -R mysql:mysql /var/lib/mysql
sudo systemctl start mysql
- 停止数据库服务并清理原数据目录:
- 增量备份与准备
- 第一次增量备份(基于全量):
xtrabackup --backup --target-dir=/data/backups/inc1 --incremental-basedir=/data/backups/full --user=backup --password=pwd - 第二次增量备份(基于上一次增量):
xtrabackup --backup --target-dir=/data/backups/inc2 --incremental-basedir=/data/backups/inc1 --user=backup --password=pwd - 准备阶段(按顺序依次应用日志):
xtrabackup --prepare --apply-log-only --target-dir=/data/backups/full
xtrabackup --prepare --apply-log-only --target-dir=/data/backups/full --incremental-dir=/data/backups/inc1
xtrabackup --prepare --target-dir=/data/backups/full --incremental-dir=/data/backups/inc2 - 完成后再按照“全量恢复”步骤进行回拷并启动数据库。
- 第一次增量备份(基于全量):
四 实践建议与注意事项
- 字符集与一致性
- 建议统一使用 utf8mb4,导出时显式指定:–default-character-set=utf8mb4;InnoDB 建议配合使用 --single-transaction 获取一致性快照,减少大表备份时的锁表影响。
- 备份用户与最小权限
- 建议单独创建专用备份账号:
CREATE USER ‘backup’@‘localhost’ IDENTIFIED BY ‘StrongPass!’;
GRANT SELECT, SHOW VIEW, RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON . TO ‘backup’@‘localhost’;
FLUSH PRIVILEGES;
- 建议单独创建专用备份账号:
- 保留与监控
- 应提前明确备份保留周期(如7 天),定期验证备份文件可用性,例如抽样执行导入测试,同时持续监控磁盘容量与备份任务成功率。
- 版本与兼容性
- 跨大版本恢复前建议先进行小范围演练;采用物理备份恢复时,尽量保持 MariaDB/MySQL 版本一致,以降低兼容性和恢复失败风险。
- 安全
- 避免在命令行中直接填写密码,优先使用 ~/.my.cnf 或 –defaults-extra-file;同时将备份文件权限限制为 600,并做好安全存储与传输管理。
