Linux 下 MySQL 数据恢复方法概览
常见恢复路径与关键命令
使用 mysqldump 备份恢复
mysqldump -u[user] -p[pass] --single-transaction --databases [db1] > backup.sqlmysql -u[user] -p[pass] < backup.sql--single-transaction 适用于 InnoDB,可在一致性视图下导出;恢复前建议先备份当前库状态。使用 Percona XtraBackup 物理恢复(InnoDB 推荐)
innobackupex --apply-log /path/to/backupsystemctl stop mysql && innobackupex --datadir=/var/lib/mysql --copy-back /path/to/backupchown -R mysql:mysql /var/lib/mysql && systemctl start mysql基于 binlog 的时间点/位置恢复
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.0000xx', MASTER_LOG_POS=xxxx;mysqlbinlog --start-position=xxxx --stop-position=yyyy /var/lib/mysql/mysql-bin.0000xx > inc.sqlmysqlbinlog --start-datetime="2025-01-01 10:00:00" --stop-datetime="2025-01-01 10:05:00" /var/lib/mysql/mysql-bin.0000xx > inc.sqlmysql -u[user] -p[pass] < inc.sql单表/单库级恢复
mysqldump -u[user] -p[pass] [db] [table] > table.sqlmysql -u[user] -p[pass] [db] < table.sqlmysqlbinlog --database=[db] --table=[table] mysql-bin.0000xx | mysql -u[user] -p[pass]误操作闪回(DML 回滚)
INSERT/UPDATE/DELETE 逆向语句,或 MyFlash 直接生成回滚 SQL。如何选择恢复方案
| 场景 | 首选方案 | 备选方案 | 关键前提 |
|---|---|---|---|
| 有最近全量备份 | 直接导入备份 | 先全量后 PITR 到目标时刻 | 备份可用、一致性校验通过 |
| 无备份但有 binlog | PITR 到误操作前 | 闪回工具(仅限 DML) | 已开启 binlog,最好为 ROW 格式 |
| 仅丢单表/单库 | 从全量备份抽表导入 | 用 binlog 仅回放该库表 | 能定位到目标库表事件 |
| 误删库/大范围 DDL | 物理备份恢复或 PITR | 专业数据恢复服务 | 有有效备份或存储层快照 |
关键注意事项与预防
expire_logs_days),避免磁盘占满;重要窗口期可临时延长保留。风险提示