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
- 若为压缩包先解压:gunzip backup.sql.gz。
- 若目标库不存在先建库:mysql -u root -p -e “CREATE DATABASE IF NOT EXISTS db_name;”。
- 执行导入: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 的文件级备份(全量或增量),希望快速整机恢复。
- 基本流程:
- 停止数据库:sudo systemctl stop mariadb。
- 备份当前数据目录:sudo mv /var/lib/mysql /var/lib/mysql.bak_$(date +%F_%H-%M-%S)。
- 准备备份(回放 redo 日志):
- mariabackup:mariabackup --prepare --target-dir=/path/to/backup
- xtrabackup:innobackupex --apply-log /path/to/backup
- 拷贝回数据目录:
- mariabackup:mariabackup --copy-back --target-dir=/path/to/backup
- xtrabackup:innobackupex --copy-back /path/to/backup
- 修正权限并启动:sudo chown -R mysql:mysql /var/lib/mysql && sudo systemctl start mariadb。
- 连接验证:mysql -u root -p -e “SHOW DATABASES;”。
四、Docker 环境的恢复
- 若备份是 /var/lib/mysql 的文件级备份:
- 启动临时容器并挂载数据目录:
docker run --name recovery_db -d -v /mnt/mysqlrecovery:/var/lib/mysql -e MARIADB_ROOT_PASSWORD=YourPass -p 3406:3306 mariadb:10.6
- 等待初始化完成后,将备份文件拷入挂载目录(宿主机到容器):
docker cp /path/to/backup.sql recovery_db:/tmp/backup.sql
- 进入容器导入:
docker exec -it recovery_db mysql -u root -p 数据库名 < /tmp/backup.sql
- 验证: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 等参数。
- 无备份的极端情况:可尝试第三方文件恢复工具,但成功率有限,务必先对现有磁盘做只读镜像再尝试。