温馨提示×

如何在ubuntu上恢复mysql数据库

小樊
38
2025-12-12 08:34:50
栏目: 云计算

在 Ubuntu 上恢复 MySQL 数据库的实用步骤

一、准备与校验

  • 确认备份类型:常见为 .sql(逻辑备份,含建库/建表/数据语句)或 .sql.gz(压缩的 SQL 备份)。
  • 校验备份完整性:
    • 对于 .sql:执行 head/tail/more 查看首尾是否完整;
    • 对于 .sql.gz:执行 gzip -t backup.sql.gz 检查是否损坏。
  • 准备目标库:若备份不含 CREATE DATABASE,需先创建同名空库;确保执行恢复的用户具备相应权限。
  • 建议先停写或在测试环境演练,避免覆盖线上数据。

二、使用 SQL 备份恢复(最常见)

  • 创建目标数据库(如备份不含建库语句):
    mysql -u root -p -e “CREATE DATABASE IF NOT EXISTS your_db;”
  • 恢复 .sql 文件:
    mysql -u root -p your_db < /path/to/backup.sql
  • 恢复 .sql.gz 文件:
    gunzip < /path/to/backup.sql.gz | mysql -u root -p your_db
  • 若备份文件是“全库”备份(含 --all-databases),可直接导入:
    mysql -u root -p < /path/to/backup_all.sql
  • 完成后登录验证:
    mysql -u root -p -e “USE your_db; SHOW TABLES;”
  • 说明:逻辑恢复通常无需停库;若遇到外键/存储过程等约束冲突,可临时调整 session 设置或在维护窗口执行。

三、时间点恢复与二进制日志(Binlog)

  • 适用场景:已有全量/增量备份,需恢复到某个时间点或误操作前的状态。
  • 检查是否开启 binlog:
    mysql -u root -p -e “SHOW VARIABLES LIKE ‘log_bin’;”
  • 查看当前写入的 binlog 文件与位置:
    mysql -u root -p -e “SHOW MASTER STATUS;”
  • 基于时间窗口回放:
    mysqlbinlog --start-datetime=“2025-12-12 10:00:00” --stop-datetime=“2025-12-12 10:05:00” /var/log/mysql/mysql-bin.00000X | mysql -u root -p
  • 基于位置回放:
    mysqlbinlog --start-position=12345 --stop-position=67890 /var/log/mysql/mysql-bin.00000X | mysql -u root -p
  • 提示:先备份当前 binlog 位置;按时间/位置精确回放,避免重复执行或遗漏事务。

四、物理备份恢复(XtraBackup,适用于 InnoDB)

  • 适用场景:使用 Percona XtraBackup 做的物理热备,需要快速全量恢复。
  • 安装工具(示例):sudo apt-get install percona-xtrabackup-24
  • 准备备份(回滚未提交事务,使备份一致性就绪):
    sudo xtrabackup --prepare --target-dir=/path/to/backup
  • 停止 MySQL 并清空数据目录(务必先备份原数据目录):
    sudo systemctl stop mysql
    sudo rm -rf /var/lib/mysql/*
  • 拷贝回数据文件:
    sudo xtrabackup --copy-back --target-dir=/path/to/backup --datadir=/var/lib/mysql
  • 修正权限并启动:
    sudo chown -R mysql:mysql /var/lib/mysql
    sudo systemctl start mysql
  • 说明:XtraBackup 恢复速度快、适合大体量 InnoDB;操作前确认 datadir 与配置文件一致。

五、常见问题与验证

  • 权限不足:使用具备 CREATE/INSERT/ALTER 等权限的账号,或以 root 执行。
  • 版本兼容:备份与恢复端 MySQL 版本差异 可能导致语法/特性不兼容,必要时在相同大版本间恢复。
  • 仅剩 .ibd 文件:可尝试使用 ibd2sql 等工具解析 .ibd 提取 DDL/数据后导入,成功率依赖表结构与文件一致性。
  • 验证清单:
    • 登录库:mysql -u root -p -e “USE your_db; SHOW TABLES;”
    • 抽样校验数据量与关键业务表记录数;
    • 检查视图/存储过程/触发器是否正常;
    • 核对自增主键、外键约束是否一致。
  • 建议:重要恢复先在测试环境演练,并定期做恢复演练与备份有效性校验。

0