温馨提示×

Linux MariaDB的备份与恢复流程

小樊
43
2025-10-12 00:44:27
栏目: 云计算

Linux环境下MariaDB备份与恢复流程

一、备份流程

MariaDB备份主要分为逻辑备份(生成SQL语句文件,可跨版本/平台恢复)和物理备份(直接复制数据文件,速度快、效率高)两类,以下是常用工具的具体操作:

1. 逻辑备份(使用mariadb-dump

mariadb-dump是MariaDB自带的逻辑备份工具,适用于需要跨版本迁移或灵活恢复的场景。

  • 备份单个数据库
    mariadb-dump -u [用户名] -p[密码] --databases [数据库名] > /path/to/backup.sql 
    示例:备份mydb数据库到/home/user/backups/mydb_backup.sql
    mariadb-dump -u root -pMySecretPassword --databases mydb > /home/user/backups/mydb_backup.sql 
  • 备份所有数据库
    mariadb-dump -u [用户名] -p[密码] --all-databases > /path/to/all_databases_backup.sql 
  • 压缩备份文件(节省空间)
    gzip /path/to/backup.sql # 生成backup.sql.gz 
  • 备份特定表
    mariadb-dump -u [用户名] -p[密码] [数据库名] [表1] [表2] > /path/to/table_backup.sql 

2. 物理备份(使用mariabackup,官方推荐)

mariabackup是MariaDB官方提供的物理备份工具,支持热备份(不停机)、增量备份,适用于InnoDB/XtraDB引擎,恢复速度快。

  • 安装mariabackup
    • Debian/Ubuntu:
      sudo apt install mariadb-backup 
    • RHEL/CentOS:
      sudo yum install mariadb-backup 
  • 执行全量备份
    mariabackup --user=[用户名] --password=[密码] --backup --target-dir=/path/to/full_backup 
    示例:全量备份到/var/backups/mariadb/full
    mariabackup --user=root --password=MySecretPassword --backup --target-dir=/var/backups/mariadb/full 
  • 执行增量备份(基于最近的全量或增量备份):
    mariabackup --user=[用户名] --password=[密码] --backup --target-dir=/path/to/incremental_backup --incremental-basedir=/path/to/last_backup 
    示例:基于/var/backups/mariadb/full做增量备份到/var/backups/mariadb/inc1
    mariabackup --user=root --password=MySecretPassword --backup --target-dir=/var/backups/mariadb/inc1 --incremental-basedir=/var/backups/mariadb/full 

3. 文件系统级物理备份(简单但需停机)

若数据库较小或允许停机,可直接复制数据目录(默认/var/lib/mysql):

sudo systemctl stop mariadb # 停止服务 sudo rsync -a /var/lib/mysql /path/to/backup/mysql_backup # 复制数据目录 sudo systemctl start mariadb # 启动服务 

二、恢复流程

恢复流程需根据备份类型(逻辑/物理)选择对应方法,以下是常见场景的操作:

1. 逻辑备份恢复(mariadb-dump生成的SQL文件)

逻辑备份恢复适用于跨版本、跨平台或需要选择性恢复的场景。

  • 恢复单个数据库
    mysql -u [用户名] -p[密码] [目标数据库名] < /path/to/backup.sql 
    示例:恢复mydb_backup.sqlmydb数据库:
    mysql -u root -pMySecretPassword mydb < /home/user/backups/mydb_backup.sql 
  • 恢复所有数据库
    mysql -u [用户名] -p[密码] < /path/to/all_databases_backup.sql 
  • 恢复到远程服务器
    mysql --host=[远程IP] -u [用户名] -p[密码] < /path/to/backup.sql 

2. 物理备份恢复(mariabackup生成的文件)

物理备份恢复适用于快速恢复大型数据库,需按全量→增量顺序操作。

  • 准备全量备份(解压、重组数据,使其可导入):
    mariabackup --prepare --target-dir=/path/to/full_backup 
  • 恢复全量备份
    1. 停止MariaDB服务:
      sudo systemctl stop mariadb 
    2. 清空现有数据目录(避免冲突):
      sudo rm -rf /var/lib/mysql/* 
    3. 将全量备份复制到数据目录:
      sudo rsync -aP /path/to/full_backup/ /var/lib/mysql/ 
    4. 修复权限(确保MariaDB用户拥有数据目录所有权):
      sudo chown -R mysql:mysql /var/lib/mysql 
    5. 启动MariaDB服务:
      sudo systemctl start mariadb 
  • 应用增量备份(若有):
    1. 准备增量备份(基于全量备份):
      mariabackup --prepare --target-dir=/path/to/full_backup --incremental-dir=/path/to/incremental_backup 
    2. 将增量备份合并到全量备份:
      sudo rsync -aP /path/to/incremental_backup/ /var/lib/mysql/ 

3. 压缩备份恢复

若备份文件为.gz.xbstream格式,需先解压再恢复:

  • 解压.gz文件
    gunzip -c /path/to/backup.sql.gz | mysql -u [用户名] -p[密码] [目标数据库名] 
  • 解压.xbstream文件(Percona XtraBackup格式):
    mbstream -x -C /path/to/backup < /path/to/backup.xbstream 
    解压后按物理备份恢复流程操作。

4. 数据损坏时的恢复(高级)

若数据库无法正常启动或数据损坏,可尝试以下方法:

  • 检查并修复表
    mysqlcheck --all-databases --check --auto-repair -u root -p 
  • 强制恢复(InnoDB损坏)
    编辑/etc/my.cnf(或/etc/mysql/my.cnf),添加:
    [mysqld] innodb_force_recovery = 1 
    重启MariaDB,逐步增加innodb_force_recovery的值(1-6),直到能启动并导出数据。
  • 使用专业工具
    若上述方法无效,可使用pt-table-checksum(Percona Toolkit)或第三方数据恢复服务。

注意事项

  • 定期测试恢复:每月至少测试一次备份文件的恢复流程,确保备份有效性。
  • 备份存储安全:将备份文件存储在异地(如云存储)或离线介质(如NAS),防止硬件故障导致数据丢失。
  • 权限管理:备份文件和数据目录需设置合理权限(如mysql:mysql),避免未授权访问。
  • 日志清理:恢复后若出现日志文件(如ib_logfile0ib_logfile1)异常,可删除并重启MariaDB重新生成。

0