温馨提示×

Debian上MySQL数据库如何恢复

小樊
36
2025-12-28 13:22:02
栏目: 云计算

Debian 上 MySQL 数据库恢复指南

一 准备与环境检查

  • 确认 MySQL 服务状态:sudo systemctl status mysql;如准备做一致性导入,可先停止写入(必要时执行 sudo systemctl stop mysql)。
  • 备份当前数据与配置:sudo cp -a /var/lib/mysql /var/lib/mysql.bak_$(date +%F_%T);sudo cp /etc/mysql /etc/mysql.bak_$(date +%F_%T)。
  • 准备恢复所需账号与权限:确保用于恢复的 MySQL 用户具备对目标库的 CREATE、DROP、INSERT、ALTER 等权限。
  • 校验备份完整性与空间:ls -lh /path/to/backup.sql*;df -h;gzip -t /path/to/backup.sql.gz。
  • 建议在非生产环境演练,避免不可逆操作。

二 使用 mysqldump 逻辑备份恢复(最常用)

  • 场景:已有 .sql 或 .sql.gz 的 逻辑备份
  • 步骤:
    1. 如恢复到新库,先在 MySQL 中创建空库:CREATE DATABASE IF NOT EXISTS your_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    2. 导入备份:
      • 未压缩:mysql -u root -p your_db < /path/to/backup.sql
      • 已压缩:zcat /path/to/backup.sql.gz | mysql -u root -p your_db
    3. 验证:SELECT COUNT(*) FROM your_table; 或检查表结构与数据量。
  • 全库恢复:mysql -u root -p < full_backup.sql(会重建所有库表,谨慎执行)。

三 时间点恢复 使用二进制日志 Binary Log

  • 适用:已有全量备份,且 binlog 已开启,需要恢复到故障前的任意时间点
  • 步骤:
    1. 检查是否开启 binlog:SHOW VARIABLES LIKE ‘log_bin’; 如为 ON 继续;查看当前文件与位置:SHOW MASTER STATUS;
    2. 定位时间或位置范围:
      • 按时间:mysqlbinlog --start-datetime=“2025-12-28 10:00:00” --stop-datetime=“2025-12-28 10:05:00” /var/lib/mysql/mysql-bin.00000* > inc.sql
      • 按位置:mysqlbinlog --start-position=154 --stop-position=123456 /var/lib/mysql/mysql-bin.00000* > inc.sql
    3. 重放增量:mysql -u root -p < inc.sql
    4. 校验数据一致性与业务状态。
  • 提示:确保 binlog 文件完整且未被轮转覆盖;生产环境建议先演练。

四 物理备份恢复 使用 Percona XtraBackup

  • 适用:需要快速全量恢复、或 InnoDB 大库,要求尽量接近崩溃前的状态。
  • 步骤:
    1. 安装工具(Debian 可用 apt):sudo apt-get install percona-xtrabackup-24
    2. 准备备份(回滚未提交事务):xtrabackup --prepare --target-dir=/backup/full_20251228
    3. 停止 MySQL:sudo systemctl stop mysql
    4. 清空数据目录(谨慎):sudo rm -rf /var/lib/mysql/*
    5. 拷贝回数据:sudo xtrabackup --copy-back --target-dir=/backup/full_20251228
    6. 修正权限:sudo chown -R mysql:mysql /var/lib/mysql
    7. 启动:sudo systemctl start mysql
  • 说明:XtraBackup 为物理备份,恢复速度快,但要求版本匹配与目录布局一致。

五 常见问题与注意事项

  • 恢复前尽量停止写入或切换到维护模式,避免导入期间产生新数据导致不一致。
  • 压缩备份请先校验:gzip -t;导入失败可分段执行或查看 .sql 头部/尾部错误定位问题。
  • 权限与字符集:创建库时显式指定 utf8mb4,导入用户具备足够权限;避免误删库后无备份可用。
  • 时间点恢复务必确认 binlog 开启与保留策略,并优先在测试环境演练。
  • 重要业务建议建立定期备份 + 定期恢复演练机制,确保备份可用。

0