MySQL 数据恢复主要依赖
mysqldump生成的 SQL 文本备份文件,恢复过程本质是执行 SQL 语句重建数据库。关键前提是:备份文件完整、目标 MySQL 实例正常运行、权限足够、字符集和引擎兼容。
确认备份文件可用性
先检查 dump 文件是否可读且结构完整:
用head -20 backup.sql查看开头是否有
CREATE DATABASE或
USE `db_name`等语句 搜索
INSERT INTO或
CREATE TABLE确认含实际数据或表结构 若文件以
gzip压缩(如
backup.sql.gz),需先解压:
gunzip backup.sql.gz避免直接恢复损坏或截断的文件,否则可能报错中断
准备恢复环境
确保目标 MySQL 服务就绪,并按需创建空库:
登录 MySQL:mysql -u root -p若备份中不含
CREATE DATABASE,需手动建库:
CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;(字符集尽量与备份一致) 确认用户对目标库有
INSERT、
CREATE、
DROP等权限;必要时授权:
GRANT ALL ON db_name.* TO 'user'@'localhost';关闭自动提交(非必需但推荐):
SET autocommit = 0;,恢复完再
COMMIT;,便于出错回滚
执行恢复命令
根据备份方式选择对应恢复方法:
若备份含CREATE DATABASE和
USE(常见于
mysqldump -A或
mysqldump --databases db1 db2):
mysql -u root -p若备份仅针对单库且不含
CREATE DATABASE,先选库再导入:
mysql -u root -p db_name大文件建议加参数提升效率:
mysql -u root -p --default-character-set=utf8mb4 --max-allowed-packet=512M db_name过程中可重定向日志:
mysql -u root -p db_name restore.log,方便排查错误
验证与收尾
恢复完成后务必验证数据完整性:
登录 MySQL,执行USE db_name;后查表数:
SHOW TABLES;随机抽样检查记录数:
SELECT COUNT(*) FROM table_name;对比备份前或日志记录 查看关键业务表的最新几条数据:
SELECT * FROM orders ORDER BY id DESC LIMIT 5;若出现乱码,大概率是字符集不匹配,需重新用正确
--default-character-set参数导入 恢复成功后,建议立即再做一次新备份,形成闭环
