专题指南

MySQL 怎么备份和恢复?mysqldump 命令和自动备份设置

Windows 11 / 10更新于

简短回答

MySQL 最常用的备份命令是 mysqldump:mysqldump -u root -p --single-transaction --databases 库名 > D:\backup\库名.sql,恢复用 mysql -u root -p < 库名.sql。想每天自动备份,把命令写进批处理脚本,再用任务计划程序每天定时运行。

手动备份

  1. 打开命令提示符,进入 MySQL 的 bin 目录(或已加入 PATH)
  2. 执行 mysqldump -u root -p --single-transaction --routines --triggers --databases 库名 > D:\backup\库名.sql
  3. 输入密码,完成后检查 .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)

  1. 新建 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"(日期格式取决于系统区域设置,先手动运行确认文件名正确)
  2. 用任务计划程序每天定时运行这个 bat,见 计划任务
  3. 建议为备份单独建一个只有 SELECT、LOCK TABLES、SHOW VIEW 等权限的账户,不要在脚本里写 root 密码
  4. 定期把备份复制到另一台机器或网盘,并删除过旧的备份

验证备份可用

备份文件能导入才算有效。定期在测试环境导入一次,确认数据完整。

提示:Linux 服务器上用 crontab 定时执行 mysqldump,原理相同。WordPress 站点也可以用插件备份,但数据库层面的备份更可靠。

常见问题

备份文件太大怎么办?
用管道压缩:在 Linux 上 mysqldump … | gzip > 库名.sql.gz;Windows 可以备份后用 7-Zip 压缩。
导入时报错 Unknown database?
备份时没加 --databases,需要先 CREATE DATABASE 再导入。
直接复制 MySQL 的 data 文件夹可以吗?
必须先停止 MySQL 服务再复制,且恢复时版本要一致,不如 mysqldump 通用。