MySQL 备份与恢复实战(mysqldump / XtraBackup / 误删恢复)
2026-08-11 01:32:30
# 数据库
“没有验证过的备份等于没有备份。” 本文梳理 MySQL 逻辑备份与物理备份的常用姿势,以及误删数据后的恢复思路。
一、逻辑备份(mysqldump)
InnoDB 一致性备份:
1 | mysqldump -u root -p --single-transaction --master-data=2 --routines --triggers mydb > mydb.sql |
--single-transaction:靠 MVCC 拿到一致性快照,不锁表(仅 InnoDB)。--master-data=2:在备份里记录 binlog 位点,便于搭建从库或 PITR。- 只备单表:
mysqldump mydb t1 > t1.sql
二、物理备份(XtraBackup)
对几百 GB 的大库,逻辑备份太慢,用 Percona XtraBackup 做物理热备:
1 | xtrabackup --backup --target-dir=/backup/full |
恢复时停库 → 清空 datadir → xtrabackup --copy-back → 修正权限 → 启动。
三、恢复
1 | mysql -u root -p mydb < mydb.sql |
四、误删数据如何救
- 有全备 + binlog(推荐 PITR):从全备恢复,再用
mysqlbinlog回放到误删前的位点。1
mysqlbinlog --start-position=154 --stop-position=900 mysql-bin.000003 | mysql -u root -p
- 闪回工具:binlog 为 ROW 格式时,可用
binlog2sql反向生成 DELETE/UNDO SQL。 - 没有备份:基本只能靠专业数据恢复,成功率低——再次印证“备份要验证”。
五、备份铁律
- 定期做;加密存异地;定期演练恢复;
- 大表避免
mysqldump锁表,优先 XtraBackup; - 注意字符集与版本一致。
小结
小库用 mysqldump(开 –single-transaction),大库用 XtraBackup;误删靠全备+binlog 闪回;最重要的是——定期演练恢复。