简短回答
MySQL 最常用的备份命令是 mysqldump:mysqldump -u root -p --single-transaction --databases 库名 > D:\backup\库名.sql,恢复用 mysql -u root -p < 库名.sql。想每天自动备份,把命令写进批处理脚本,再用任务计划程序每天定时运行。
手动备份
- 打开命令提示符,进入 MySQL 的 bin 目录(或已加入 PATH)
- 执行
mysqldump -u root -p --single-transaction --routines --triggers --databases 库名 > D:\backup\库名.sql - 输入密码,完成后检查 .sql 文件大小是否正常
| 参数 | 作用 |
|---|---|
| –single-transaction | InnoDB 表备份时不锁表,网站可以继续运行 |
| –routines –triggers | 同时备份存储过程和触发器 |
| –databases 库名 | 备份指定库(包含建库语句) |
| –all-databases | 备份所有库 |
| –default-character-set=utf8mb4 | 避免中文乱码 |
恢复
mysql -u root -p < D:\backup\库名.sql;如果备份时没有加 –databases,需要先建库,再 mysql -u root -p 库名 < 文件.sql。图形工具(HeidiSQL、Navicat、phpMyAdmin)也可以导入 .sql 文件,大文件建议用命令行。
每天自动备份(Windows)
- 新建 backup.bat,写入:
"C:\mysql\bin\mysqldump.exe" -u backup --password=密码 --single-transaction --databases 库名 > "D:\backup\库名_%date:~0,4%%date:~5,2%%date:~8,2%.sql"(日期格式取决于系统区域设置,先手动运行确认文件名正确) - 用任务计划程序每天定时运行这个 bat,见 计划任务
- 建议为备份单独建一个只有 SELECT、LOCK TABLES、SHOW VIEW 等权限的账户,不要在脚本里写 root 密码
- 定期把备份复制到另一台机器或网盘,并删除过旧的备份
验证备份可用
备份文件能导入才算有效。定期在测试环境导入一次,确认数据完整。
提示:Linux 服务器上用 crontab 定时执行 mysqldump,原理相同。WordPress 站点也可以用插件备份,但数据库层面的备份更可靠。
常见问题
备份文件太大怎么办?
用管道压缩:在 Linux 上
mysqldump … | gzip > 库名.sql.gz;Windows 可以备份后用 7-Zip 压缩。导入时报错 Unknown database?
备份时没加 --databases,需要先 CREATE DATABASE 再导入。
直接复制 MySQL 的 data 文件夹可以吗?
必须先停止 MySQL 服务再复制,且恢复时版本要一致,不如 mysqldump 通用。