在 MySQL 里,常见的 备份方式 有三类:
最常用的方法就是用 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
。
例如每天凌晨 2 点自动备份:
0 2 * * * mysqldump -u root -p'密码' mydb > /backup/mydb_$(date +\%F).sql
👉 如果你是个人项目或小型数据库,推荐 mysqldump + cron; 👉 如果你是生产环境大库,推荐 XtraBackup 热备。
很好的问题 👍 在生产环境里,光有备份还不够,重点是能随时回档(恢复到某个时间点)。因此常见方案会结合 全量备份 + 增量/日志备份 来保证恢复能力。
mysqldump
(小库)、XtraBackup
(大库)MySQL 的 binlog 记录了所有写入操作。
配置示例(my.cnf
):
[mysqld]
log_bin = mysql-bin
binlog_format = ROW
expire_logs_days = 7 # 自动清理超过 7 天的日志
server_id = 1
回档用法:
mysqlbinlog --start-datetime="2025-08-22 10:00:00" \
--stop-datetime="2025-08-22 15:00:00" \
| mysql -u root -p /var/lib/mysql/mysql-bin.000123
mysqldump
导出 + binlog大多数生产环境是:
XtraBackup
或
mysqldump
);恢复流程一般是:
**全量备份 → 增量备份 → binlog 回放 → 恢复到指定时间点