温馨提示×

如何恢复Ubuntu MariaDB数据

小樊
44
2025-12-14 16:02:30
栏目: 云计算

Ubuntu 上恢复 MariaDB 数据的实用步骤

一、准备与检查

  • 确认 MariaDB 服务处于可用状态:sudo systemctl status mariadb;若未运行:sudo systemctl start mariadb
  • 准备好备份文件:常见为 .sql(逻辑备份)、.sql.gz(压缩逻辑备份)、或 .dump(按表导出的文本数据)。
  • 恢复前建议先备份当前数据目录(若存在):sudo cp -a /var/lib/mysql /var/lib/mysql.bak_$(date +%F_%H-%M-%S)
  • 如为云上实例或需跨环境恢复,尽量保持 MariaDB 版本一致,避免兼容性问题。

二、按备份类型选择恢复方法

  • 逻辑备份 .sql 或 .sql.gz
    1. 若为压缩包先解压:gunzip backup.sql.gz
    2. 若目标库不存在先建库:mysql -u root -p -e “CREATE DATABASE IF NOT EXISTS db_name;”
    3. 执行导入:mysql -u 用户名 -p 数据库名 < backup.sql
  • 压缩备份的一行式示例:gunzip < backup.sql.gz | mysql -u root -p 数据库名
  • 按表导出的 .dump 文件
    • 方式 A(推荐):mysqlimport -u 用户名 -p --local 数据库名 备份文件.dump
    • 方式 B:mariadb-restore -u 用户名 -p --databases 数据库名 备份文件.dump
  • 验证恢复结果:mysql -u 用户名 -p 数据库名 -e “SHOW TABLES; SELECT COUNT(*) FROM 表名;”

三、物理恢复 使用 mariabackup 或 xtrabackup

  • 适用场景:有 /var/lib/mysql 的文件级备份(全量或增量),希望快速整机恢复。
  • 基本流程:
    1. 停止数据库:sudo systemctl stop mariadb
    2. 备份当前数据目录:sudo mv /var/lib/mysql /var/lib/mysql.bak_$(date +%F_%H-%M-%S)
    3. 准备备份(回放 redo 日志):
      • mariabackup:mariabackup --prepare --target-dir=/path/to/backup
      • xtrabackup:innobackupex --apply-log /path/to/backup
    4. 拷贝回数据目录:
      • mariabackup:mariabackup --copy-back --target-dir=/path/to/backup
      • xtrabackup:innobackupex --copy-back /path/to/backup
    5. 修正权限并启动:sudo chown -R mysql:mysql /var/lib/mysql && sudo systemctl start mariadb
    6. 连接验证:mysql -u root -p -e “SHOW DATABASES;”

四、Docker 环境的恢复

  • 若备份是 /var/lib/mysql 的文件级备份:
    1. 启动临时容器并挂载数据目录:
      docker run --name recovery_db -d -v /mnt/mysqlrecovery:/var/lib/mysql -e MARIADB_ROOT_PASSWORD=YourPass -p 3406:3306 mariadb:10.6
    2. 等待初始化完成后,将备份文件拷入挂载目录(宿主机到容器):
      docker cp /path/to/backup.sql recovery_db:/tmp/backup.sql
    3. 进入容器导入:
      docker exec -it recovery_db mysql -u root -p 数据库名 < /tmp/backup.sql
    4. 验证:docker exec -it recovery_db mysql -u root -p -e “SHOW TABLES;”
  • 若备份是 .sql/.sql.gz,也可直接在容器内用管道导入,或先复制到容器内再导入。

五、常见问题与要点

  • 版本匹配:源与目标 MariaDB 版本尽量一致,避免系统表结构或存储引擎差异导致恢复失败。
  • 权限与属主:物理恢复后务必执行 chown -R mysql:mysql /var/lib/mysql,否则可能无法启动。
  • 字符集与排序规则:建议在创建库时显式指定,例如:
    CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • 空间与性能:确保磁盘空间充足;大数据量导入时,可在非高峰时段执行,并适当调整 innodb_buffer_pool_size 等参数。
  • 无备份的极端情况:可尝试第三方文件恢复工具,但成功率有限,务必先对现有磁盘做只读镜像再尝试。

0