温馨提示×

如何实现MariaDB自动备份

小樊
36
2026-01-01 01:48:07
栏目: 云计算

MariaDB自动备份落地方案

一 方案选型与准备

  • 选型建议
    • 逻辑备份:使用 mysqldump,适合跨版本迁移、单库/多库/全库导出,配合压缩与定时任务即可满足多数中小规模场景。
    • 物理热备:使用 mariabackup(MariaDB 官方备份工具),支持 InnoDB 热备,适合大数据量、需要更高恢复效率与时间点恢复的场景。
  • 备份账号与权限
    • 建议创建最小权限备份账号:
      • 逻辑备份:授予 SELECT、SHOW VIEW、LOCK TABLES、RELOAD、PROCESS、REPLICATION CLIENT(按需精简)。
      • 物理备份:授予 RELOAD、PROCESS、LOCK TABLES、REPLICATION CLIENT 等。
    • 示例:
      • CREATE USER ‘buser’@‘localhost’ IDENTIFIED BY ‘StrongPass!’;
      • GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON . TO ‘buser’@‘localhost’;
      • FLUSH PRIVILEGES;
  • 基础配置
    • 物理备份建议开启 InnoDB 重做日志与(可选)二进制日志,便于恢复与时间点恢复:
      • 在 my.cnf 的 [mysqld] 中配置:log-bin=mysql-bin;并确保 server-id 唯一。

二 方案一 mysqldump逻辑备份与定时任务

  • 单库备份脚本示例(含压缩与保留策略)
    • 保存为:/opt/scripts/mariadb_backup.sh
    • 执行:chmod +x /opt/scripts/mariadb_backup.sh
    • 示例:
      • #!/bin/bash DATE=$(date +%F_%H%M%S) BACKUP_DIR=“/opt/backup/mysql” DB=“mydb” USER=“buser” PASS=“StrongPass!” mkdir -p “$BACKUP_DIR” mysqldump -u"$USER" -p"$PASS" --single-transaction --routines --triggers --default-character-set=utf8mb4 “$DB”
        | gzip > “$BACKUP_DIR/${DB}_${DATE}.sql.gz”

        保留最近7天

        find “$BACKUP_DIR” -name “${DB}_*.sql.gz” -mtime +7 -delete
  • 全库备份(可选)
    • 将 mysqldump 行替换为:mysqldump -u"$USER" -p"$PASS" --all-databases --single-transaction --routines --triggers --default-character-set=utf8mb4 | gzip > “$BACKUP_DIR/all_${DATE}.sql.gz”
  • 定时任务
    • 每天 02:00 执行:
      • 0 2 * * * /opt/scripts/mariadb_backup.sh >> /var/log/mariadb_backup.log 2>&1
  • 恢复示例
    • gunzip < /opt/backup/mysql/mydb_2026-01-01_020000.sql.gz | mysql -u root -p[密码] mydb
    • 全库:mysql -u root -p[密码] < /opt/backup/mysql/all_2026-01-01_020000.sql

三 方案二 mariabackup物理热备与定时任务

  • 安装工具
    • RHEL/CentOS:yum -y install MariaDB-backup
  • 全量+增量策略(示例)
    • 每天 01:10 执行全量;其余时间每小时增量(以“上一次备份目录”为基目录)。
    • 备份脚本:/opt/scripts/mariabackup_inc.sh
      • #!/bin/bash BASE_DIR=“/opt/backup/mariabackup” LOG=“/var/log/mariabackup.log” USER=“buser” PASS=“StrongPass!” DATE=$(date +%F) mkdir -p “$BASE_DIR/$DATE” LAST_FILE=“$BASE_DIR/last_backup”

        当天是否已有全量

        if [ ! -f “$LAST_FILE” ] || [ $(find “$LAST_FILE” -mtime +0 | wc -l) -gt 0 ]; then TAG=“full_$(date +%H%M%S)” TARGET=“$BASE_DIR/$DATE/$TAG” mariabackup --backup --user=“$USER” --password=“$PASS” --target-dir=“$TARGET” >> “$LOG” 2>&1 if [ $? -eq 0 ]; then echo “$TARGET” > “$LAST_FILE” echo “$(date) 全量完成: $TARGET” >> “$LOG” else echo “$(date) 全量失败” >> “$LOG” exit 1 fi else LAST_BASE=$(cat “$LAST_FILE”) TAG=“incr_$(date +%H%M%S)” TARGET=“$BASE_DIR/$DATE/$TAG” mariabackup --backup --user=“$USER” --password=“$PASS” --target-dir=“$TARGET” --incremental-basedir=“$LAST_BASE” >> “$LOG” 2>&1 if [ $? -eq 0 ]; then echo “$TARGET” > “$LAST_FILE” echo “$(date) 增量完成: $TARGET” >> “$LOG” else echo “$(date) 增量失败” >> “$LOG” exit 1 fi fi

        保留最近7天

        find “$BASE_DIR” -mindepth 1 -maxdepth 1 -type d -mtime +7 -exec rm -rf {} ;

  • 定时任务
    • 全量:10 1 * * * /opt/scripts/mariabackup_inc.sh
    • 增量:0 * * * * /opt/scripts/mariabackup_inc.sh
  • 恢复要点(按顺序)
    • 准备阶段(–prepare)
      • mariabackup --prepare --target-dir=/opt/backup/mariabackup/2026-01-01/full_xxxxxx
      • mariabackup --prepare --target-dir=/opt/backup/mariabackup/2026-01-01/full_xxxxxx --incremental-dir=/opt/backup/mariabackup/2026-01-01/incr_yyyyyy
      • 如有更多增量,依次基于“上一次增量”执行
    • 恢复阶段(–copy-back)
      • systemctl stop mariadb
      • mv /var/lib/mysql /var/lib/mysql.bak
      • mkdir -p /var/lib/mysql
      • mariabackup --copy-back --target-dir=/opt/backup/mariabackup/2026-01-01/full_xxxxxx
      • chown -R mysql:mysql /var/lib/mysql
      • systemctl start mariadb

四 远程备份与保留策略

  • 远程拷贝
    • rsync 示例(放到备份脚本末尾,或单独定时任务):
      • rsync -avz --delete /opt/backup/mysql/ user@backup-server:/remote/backup/mysql/
      • 或增量备份完成后立即同步,减少 RPO。
  • 保留与校验
    • 按时间保留(如 7 天)已在脚本中通过 find 实现;建议增加定期恢复演练与校验(如每周抽样解压导入到测试库验证可用性)。
  • 安全建议
    • 备份文件可加密:gpg -c /opt/backup/mysql/mydb_2026-01-01.sql.gz
    • 凭据安全:脚本中避免明文密码,可使用配置文件(权限 600)或凭据文件/密钥管理工具。

五 常见注意事项

  • 一致性
    • mysqldump 加 –single-transaction 获取一致性快照(InnoDB);MyISAM 需配合 –lock-tables(会短暂锁表)。
  • 字符集与兼容性
    • 建议统一使用 utf8mb4,避免导入乱码。
  • 空间与性能
    • 大库建议物理备份;压缩可显著节省空间但会增加 CPU 与时间开销。
  • 监控与告警
    • 将脚本退出码与日志接入监控系统;备份失败即时告警(邮件/企业微信/钉钉等)。
  • 时间点恢复
    • 需要时间点恢复时,务必开启 二进制日志,并妥善保存 binlog(与备份策略协同)。

0