温馨提示×

Ubuntu MariaDB如何实现数据恢复

小樊
38
2025-12-28 09:27:56
栏目: 云计算

Ubuntu MariaDB 数据恢复实用指南

一 恢复前的准备与判断

  • 立刻停止对涉及磁盘的写入:执行 sudo systemctl stop mariadb,避免被删除或受损的数据被覆盖。
  • 确认是否有可用备份:常见为 .sql(逻辑备份)、.dump(导入工具备份),或整库的物理备份(数据目录拷贝)。
  • 检查错误日志以定位问题:查看 /var/log/mysql/error.log,关注异常时间、表损坏或 InnoDB 崩溃信息。
  • 规划恢复路径:优先从备份恢复;无备份时再考虑文件系统级恢复工具(如 extundelete)。
  • 全程保持一份“当前状态”的只读副本(例如对 /var/lib/mysql 做一次快照或整机快照),以防二次损坏。

二 从备份恢复

  • SQL 逻辑备份(.sql)
    • 单库恢复:mysql -u 用户名 -p 数据库名 < backup.sql
    • 全库恢复:mysql -u 用户名 -p < backup.sql
    • 示例:mysql -u root -p mydb < /home/user/backup.sql
  • .dump 文件(适合表级或文本格式数据)
    • 使用 mysqlimport:mysqlimport -u 用户名 -p --local 数据库名 file.dump
    • 使用 mariadb-restore:mariadb-restore -u 用户名 -p --databases 数据库名 file.dump
  • 物理备份(整库目录)
    • 停止服务:sudo systemctl stop mariadb
    • 恢复数据目录:sudo rsync -aAXv /path/to/backup/ /var/lib/mysql/
    • 修正权限:sudo chown -R mysql:mysql /var/lib/mysql
    • 启动服务:sudo systemctl start mariadb
  • 图形化工具(如 phpMyAdmin/SQLAdmin)
    • 登录后选择目标数据库,点击“导入/Restore”,选择 .sql 或压缩的 .sql.gz 文件,按需勾选“覆盖现有对象”,开始恢复并监控进度。

三 无备份时的文件级恢复

  • 适用前提:数据文件被误删但磁盘仍有残留,且文件系统为 ext3/ext4
  • 操作步骤:
    • 保持只读:sudo mount -o remount,ro /(或卸载相关分区)
    • 恢复单文件:sudo extundelete /dev/sdXN --restore-file /var/lib/mysql/db/table.ibd
    • 恢复目录:sudo extundelete /dev/sdXN --restore-directory /var/lib/mysql/db
    • 完成后改回读写并启动服务:sudo mount -o remount,rw /;sudo systemctl start mariadb
  • 其他工具:如 testdisk 可尝试分区与文件恢复(sudo testdisk,按向导 Analyse/Quick Search/Deeper Search 并复制恢复结果)。
  • 重要提示:恢复成功率受删除后写入量、文件系统类型与时间影响,务必先停止写入并优先将恢复结果拷贝到安全位置。

四 InnoDB 崩溃或无法启动的恢复

  • 查看错误日志:tail -n 200 /var/log/mysql/error.log,定位是否为 InnoDB 崩溃、表空间损坏等。
  • 干净恢复流程:
    • 停止服务:sudo systemctl stop mariadb
    • 备份当前数据目录:sudo cp -a /var/lib/mysql /var/lib/mysql.bak_$(date +%F_%T)
    • 若有良好备份,用备份覆盖 /var/lib/mysql 并修正权限:sudo chown -R mysql:mysql /var/lib/mysql
    • 启动服务:sudo systemctl start mariadb;若仍失败,回滚到备份并进一步分析错误日志。

五 验证与后续预防

  • 恢复后验证:
    • 登录数据库:mysql -u 用户名 -p 数据库名
    • 检查对象与数据:SHOW TABLES; SELECT COUNT(*) FROM 重要表;
  • 预防建议:
    • 定期做逻辑备份(如 mysqldump)与物理备份(整库拷贝),并做异地/离线留存。
    • 关键库表开启 二进制日志(binlog)以便时间点恢复(PITR)。
    • 对重要数据盘配置 RAID 或冗余,减少磁盘故障带来的数据风险。

0