温馨提示×

Linux MariaDB备份与恢复最佳实践

小樊
55
2026-06-30 15:01:22
栏目: 云计算

下面是 Linux 环境下 MariaDB 备份与恢复的最佳实践,涵盖策略选择、常用工具、示例命令、注意事项和自动化方案,适合生产环境参考。


一、备份策略选择(核心)

1️⃣ 逻辑备份 vs 物理备份

类型 工具 适用场景 优点 缺点
逻辑备份 mysqldump 小中型数据库、跨版本迁移 可读 SQL、跨平台 恢复慢、锁表风险
物理备份 mariabackup 大型数据库、高可用 恢复快、一致性高 需要额外工具
增量备份 mariabackup TB 级数据 节省空间 操作复杂

推荐组合

  • 生产环境:mariabackup 全量 + 增量
  • 辅助方案:mysqldump(结构 + 小表)

二、逻辑备份最佳实践(mysqldump)

1️⃣ 单库备份

mysqldump -u root -p --single-transaction --routines --triggers --events db_name > db_name_$(date +%F).sql

2️⃣ 全库备份

mysqldump -u root -p --all-databases --single-transaction --routines --triggers --events > full_backup_$(date +%F).sql

3️⃣ 常用参数说明

参数 说明
--single-transaction InnoDB 无锁备份
--routines 存储过程
--triggers 触发器
--events 事件
--master-data=2 记录 binlog 位置
--quick 防止内存溢出

⚠️ MyISAM 表必须加 --lock-tables


三、物理备份最佳实践(推荐 ✅)

1️⃣ 安装 mariabackup

yum install MariaDB-backup -y
# 或
apt install mariadb-backup -y

2️⃣ 全量备份

mariabackup --backup \
  --target-dir=/backup/mysql/full \
  --user=root --password

3️⃣ 准备备份(必须)

mariabackup --prepare \
  --target-dir=/backup/mysql/full

4️⃣ 增量备份

mariabackup --backup \
  --target-dir=/backup/mysql/inc1 \
  --incremental-basedir=/backup/mysql/full \
  --user=root --password

四、恢复数据库(重点)

1️⃣ mysqldump 恢复

mysql -u root -p < full_backup.sql

或指定数据库:

mysql -u root -p db_name < db_name.sql

2️⃣ mariabackup 恢复

停止数据库

systemctl stop mariadb

清空数据目录

rm -rf /var/lib/mysql/*

恢复

mariabackup --copy-back \
  --target-dir=/backup/mysql/full

修改权限

chown -R mysql:mysql /var/lib/mysql

启动

systemctl start mariadb

五、自动化备份(生产必备)

1️⃣ 定时备份脚本示例

#!/bin/bash
BACKUP_DIR=/backup/mysql
DATE=$(date +%F)
mkdir -p $BACKUP_DIR

mariabackup --backup \
  --target-dir=$BACKUP_DIR/$DATE \
  --user=root --password

find $BACKUP_DIR -type d -mtime +7 -exec rm -rf {} \;

2️⃣ 加入 crontab

0 2 * * * /usr/local/bin/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1

六、备份校验与监控

必须做的

  • 定期恢复演练(至少每季度)
  • 校验备份文件完整性
  • 监控磁盘空间
  • 备份目录权限 700
ls -lh /backup/mysql
du -sh /backup/mysql

七、高可用与 Binlog(高级)

1️⃣ 开启 binlog

[mysqld]
log-bin=mysql-bin
server-id=1

2️⃣ 时间点恢复(PITR)

mysqlbinlog mysql-bin.000012 --start-datetime="2025-01-01 10:00:00" | mysql -u root -p

八、总结(推荐方案)

生产环境推荐

  • 每天 mariabackup 全量
  • 每 6 小时 增量
  • 每小时 binlog 归档
  • 每月 恢复演练

简单场景

  • mysqldump + cron

如果你愿意,我可以:

  • ✅ 帮你写 完整生产级备份脚本
  • ✅ 针对 Docker / 主从 / Galera 场景定制
  • ✅ 评估你当前 MariaDB 架构的备份方案是否合理

只需告诉我你的 数据量 + 版本 + 是否主从

0