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
2
xtrabackup --backup --target-dir=/backup/full
xtrabackup --prepare --target-dir=/backup/full # 应用 redo,使备份一致

恢复时停库 → 清空 datadir → xtrabackup --copy-back → 修正权限 → 启动。

三、恢复

1
mysql -u root -p mydb < mydb.sql

四、误删数据如何救

  1. 有全备 + binlog(推荐 PITR):从全备恢复,再用 mysqlbinlog 回放到误删前的位点。
    1
    mysqlbinlog --start-position=154 --stop-position=900 mysql-bin.000003 | mysql -u root -p
  2. 闪回工具:binlog 为 ROW 格式时,可用 binlog2sql 反向生成 DELETE/UNDO SQL。
  3. 没有备份:基本只能靠专业数据恢复,成功率低——再次印证“备份要验证”。

五、备份铁律

  • 定期做;加密存异地;定期演练恢复
  • 大表避免 mysqldump 锁表,优先 XtraBackup;
  • 注意字符集与版本一致。

小结

小库用 mysqldump(开 –single-transaction),大库用 XtraBackup;误删靠全备+binlog 闪回;最重要的是——定期演练恢复