MySQL 备份

在 MySQL 里,常见的 备份方式 有三类:

逻辑备份(导出 SQL 文件)

最常用的方法就是用 mysqldump,会把表结构、数据导出成 SQL 脚本。小心mysqldump生成的SQL文件中有删表删库语句,生成的SQL执行时一定要检查一定要检查。

# 备份整个数据库
mysqldump -u 用户名 -p 数据库名 > backup.sql

# 备份多个数据库
mysqldump -u 用户名 -p --databases db1 db2 > backup.sql

# 备份所有数据库
mysqldump -u 用户名 -p --all-databases > backup.sql

# 只备份表结构(不含数据)
mysqldump -u 用户名 -p -d 数据库名 > schema.sql

恢复时:

mysql -u 用户名 -p 数据库名 < backup.sql

优点:通用、简单。 缺点:大数据量时速度慢,文件也会很大。


物理备份(直接复制数据文件)

MySQL 的数据文件在 datadir 目录里(默认 /var/lib/mysql)。 可以停库后直接拷贝:

systemctl stop mysqld
cp -R /var/lib/mysql /backup/mysql-data
systemctl start mysqld

恢复时再拷回去。

优点:快,适合大库。 缺点:必须停库,或者用支持热备的工具。


热备工具(无需停机)

如果需要不停机备份,可以用:

示例(xtrabackup):

xtrabackup --backup --target-dir=/backup/xtrabackup/
xtrabackup --prepare --target-dir=/backup/xtrabackup/

恢复时再把目录拷回 datadir


定时备份(结合 cron)

例如每天凌晨 2 点自动备份:

0 2 * * * mysqldump -u root -p'密码' mydb > /backup/mydb_$(date +\%F).sql

👉 如果你是个人项目或小型数据库,推荐 mysqldump + cron; 👉 如果你是生产环境大库,推荐 XtraBackup 热备

很好的问题 👍 在生产环境里,光有备份还不够,重点是能随时回档(恢复到某个时间点)。因此常见方案会结合 全量备份 + 增量/日志备份 来保证恢复能力。


生产环境常见 MySQL 备份策略

全量备份(Full Backup)


增量/差异备份


Binlog(二进制日志备份,必开!)


冷/热备方式


总结

大多数生产环境是:

  1. 每天/每周全量备份XtraBackupmysqldump);
  2. 实时开启 binlog,保留 7~30 天;
  3. 根据需要做增量备份
  4. 从库备份(避免影响主库)。

恢复流程一般是:

**全量备份 → 增量备份 → binlog 回放 → 恢复到指定时间点