温馨提示×

Debian MariaDB备份恢复方法

小樊
38
2025-12-19 02:24:41
栏目: 云计算

Debian 上 MariaDB 的备份与恢复实践

一 常用方法概览

  • 逻辑备份:使用 mysqldump 导出为 .sql 脚本,适合大多数场景,支持跨版本迁移、选择性恢复与细粒度对象控制。
  • 自动化脚本:如 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;”
    • 导入脚本:
      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

三 物理热备与恢复步骤 XtraBackup

  • 适用场景:需要不中断业务的备份、支持增量备份快速恢复的大数据量实例。
  • 安装(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,妥善存储与传输。

0