温馨提示×

如何在ubuntu上恢复丢失的mysql数据

小樊
45
2025-12-14 07:39:18
栏目: 云计算

在 Ubuntu 上恢复丢失的 MySQL 数据

一、先判断场景与准备

  • 明确丢失类型:是误删表/库数据目录损坏误执行 DROP/TRUNCATE,还是无备份
  • 立刻保护现场:不要随意写入或重启 MySQL;如有可能,先对当前数据目录与配置文件做一次只读拷贝备份(例如:/var/lib/mysql/etc/mysql/)。
  • 检查是否开启二进制日志(Binlog),这是实现时间点恢复的关键:
    • 登录 MySQL:mysql -u root -p
    • 执行:SHOW VARIABLES LIKE ‘log_bin’; 若为ON说明已开启。
  • 确认 MySQL 版本与目标环境一致,避免恢复时结构/特性不兼容。
  • 准备恢复目标库:mysql -u root -p -e “CREATE DATABASE IF NOT EXISTS your_db;”。

二、有备份时的标准恢复

  • SQL 逻辑备份(mysqldump 生成 .sql 或 .sql.gz)
    • 恢复单库:mysql -u root -p your_db < backup.sql
    • 恢复全库:mysql -u root -p < alldatabases.sql
    • 压缩备份:gunzip < backup.sql.gz | mysql -u root -p your_db
  • 物理备份(Percona XtraBackup,适合 InnoDB,支持热备)
    • 准备阶段:xtrabackup --prepare --target-dir=/path/to/backup
    • 拷贝回数据目录:xtrabackup --copy-back --target-dir=/path/to/backup
    • 修复权限并启动:chown -R mysql:mysql /var/lib/mysql && sudo systemctl start mysql
  • 并行导入加速(MyDumper/MyLoader)
    • 先建库表结构,再用 myloader 并行导入:myloader -d /backup/ -o -B your_db -u root -p

三、无备份时的补救路径

  • 时间点恢复(需提前开启 Binlog)
    • 查看日志:SHOW BINARY LOGS;
    • 按时间窗口导出并重放:
      • mysqlbinlog --start-datetime=“2025-12-14 09:00:00” --stop-datetime=“2025-12-14 10:00:00” /var/log/mysql/mysql-bin.000001 | mysql -u root -p
    • 也可按位置恢复:mysqlbinlog --start-position=4 --stop-position=123456 mysql-bin.000001 | mysql -u root -p
  • 无 Binlog 的表级恢复(InnoDB 场景)
    • 工具链:Undrop for InnoDB(从 .frm/.ibd 重建表)、Percona Data Recovery Tool(页级解析)。
    • 基本思路:创建同结构空表 → 丢弃表空间(ALTER TABLE … DISCARD TABLESPACE)→ 拷贝原 .ibd 到数据目录 → 导入表空间(ALTER TABLE … IMPORT TABLESPACE)。
    • 注意:需严格匹配表结构(列顺序、索引、字符集/校对规则等),操作前务必完整备份当前环境。

四、图形化与自动化方式

  • phpMyAdmin:在目标库中进入导入页,选择 .sql 备份文件执行。
  • 自动化脚本(示例):
    • #!/bin/bash
      DB_NAME=“your_db”; DB_USER=“root”; BACKUP_FILE=“backup.sql”
      mysql -u “$DB_USER” -p -e “CREATE DATABASE IF NOT EXISTS $DB_NAME;”
      mysql -u “$DB_USER” -p “$DB_NAME” < “$BACKUP_FILE”
      echo “Restore finished.”
    • 赋权并运行:chmod +x restore.sh && ./restore.sh

五、验证与后续预防

  • 恢复后验证:
    • 登录检查:mysql -u root -p -e “USE your_db; SHOW TABLES;”
    • 抽样校验数据行数与关键业务数据一致性。
  • 预防建议:
    • 建立全量 + 增量策略(例如每周全量、每日增量),增量可用 XtraBackupBinlog
    • 定期在测试环境演练恢复流程,并保留至少2 个时间点的备份。
    • 对关键库表设置延迟复制(MySQL 8.0+)降低误删影响范围。

0