在 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;”
- 抽样校验数据量与关键业务表记录数;
- 检查视图/存储过程/触发器是否正常;
- 核对自增主键、外键约束是否一致。
- 建议:重要恢复先在测试环境演练,并定期做恢复演练与备份有效性校验。