MySQL 数据库备份与恢复完整教程(mysqldump)
MySQL 数据库备份与恢复完整教程(mysqldump)
很多人在:
- 网站迁移
- 云服务器迁移
- 数据备份
- 数据恢复
- 数据库升级
时,都需要:
1 | 备份 MySQL 数据库 |
或者:
1 | 恢复 .sql 文件 |
MySQL 官方最常用的工具:
1 | mysqldump |
本篇文章教你:
- 如何备份 MySQL 数据库
- 如何恢复 SQL 文件
- 如何导入数据库
- 如何导出数据库
- 如何自动备份
- Linux 常用备份命令
什么是 mysqldump?
mysqldump:
1 | 是 MySQL 官方提供的数据库备份工具 |
作用:
- 导出数据库
- 导出表结构
- 导出数据
- 数据迁移
- 自动备份
最终会生成:
1 | .sql 文件 |
一、恢复 SQL 文件(导入数据库)
很多时候:
1 | 别人会给你一个 .sql 文件 |
例如:
1 | 1.sql |
或者:
1 | cms-backup.sql |
这时候:
1 | 需要导入数据库 |
基础恢复命令
进入:
1 | .sql 文件所在目录 |
然后执行:
1 | mysql -u root -p 数据库名 < 文件.sql |
示例 1
1 | mysql -u root -p pay < db_jucaizf_1688_20230927_160004_2nsMdq.sql |
含义:
| 内容 | 说明 |
|---|---|
| pay | 导入到 pay 数据库 |
| .sql 文件 | 数据备份文件 |
示例 2
1 | mysql -u cms-collection -p cms-collection < /java/jar/1.sql |
含义:
| 内容 | 说明 |
|---|---|
| cms-collection | 数据库用户名 |
| cms-collection | 数据库名 |
| /java/jar/1.sql | SQL 文件路径 |
导入前注意事项
必须:
1 | 提前创建数据库 |
否则:
1 | 会报错 |
例如:
1 | CREATE DATABASE cms; |
导入过程中卡住?
正常现象:
1 | MySQL 正在导入数据 |
大型数据库:
1 | 可能需要几分钟甚至几十分钟 |
二、备份数据库
MySQL 使用:
1 | mysqldump |
导出数据库。
基础备份命令
1 | mysqldump -u root -p 数据库名 > 文件名.sql |
示例
1 | mysqldump -u root -p cms > /java/jar/cms-backup.sql |
含义:
| 内容 | 说明 |
|---|---|
| cms | 数据库名 |
| cms-backup.sql | 导出的 SQL 文件 |
为什么推荐 root 权限?
因为:
1 | root 权限最完整 |
否则:
1 | 某些表可能无法导出 |
特别是:
- VIEW
- TRIGGER
- EVENT
- FUNCTION
三、备份所有数据库
执行:
1 | mysqldump -u root -p --all-databases > all.sql |
作用:
1 | 导出整个 MySQL |
包括:
- 所有数据库
- 用户
- 权限
- 表结构
四、只备份表结构
例如:
1 | mysqldump -u root -p -d cms > cms-structure.sql |
-d 是什么意思?
表示:
1 | 只导出表结构 |
不导出数据。
五、只备份某张表
例如:
1 | mysqldump -u root -p cms user > user.sql |
作用:
1 | 只备份 user 表 |
六、压缩备份(推荐)
大型数据库:
1 | 建议直接 gzip 压缩 |
例如:
1 | mysqldump -u root -p cms | gzip > cms.sql.gz |
优点:
- 节省空间
- 传输更快
恢复 gzip 数据库
例如:
1 | gunzip < cms.sql.gz | mysql -u root -p cms |
七、自动备份(推荐)
Linux 推荐:
1 | crontab 定时任务 |
例如:
每天凌晨 3 点自动备份:
1 | 0 3 * * * mysqldump -u root -p密码 cms > /backup/cms.sql |
编辑 crontab
执行:
1 | crontab -e |
推荐自动删除旧备份
例如:
1 | find /backup -mtime +7 -delete |
作用:
1 | 删除 7 天前备份 |
防止:
1 | 磁盘被占满 |
八、查看数据库大小
进入 MySQL:
1 | SELECT |
九、常见问题
1. Access denied
原因:
- 用户权限不足
- 密码错误
建议:
1 | 使用 root |
2. Unknown database
说明:
1 | 数据库不存在 |
需要:
1 | CREATE DATABASE xxx; |
3. 导入中文乱码
建议:
1 | mysql -u root -p --default-character-set=utf8mb4 |
4. 超大数据库导入很慢
推荐:
- 使用 screen
- 使用 tmux
- 后台运行
否则:
1 | SSH 断开会导致导入中断 |
十、推荐生产环境方案
建议:
| 功能 | 推荐 |
|---|---|
| 自动备份 | 开启 |
| gzip 压缩 | 开启 |
| 异地备份 | 开启 |
| 定时删除旧备份 | 开启 |
| 数据库监控 | 开启 |
推荐备份目录
例如:
1 | /backup/mysql/ |
分类:
1 | 按日期备份 |
例如:
1 | 2026-05-21-cms.sql |
十一、重要提醒
数据库备份:
1 | 一定要定期测试恢复 |
很多人:
1 | 以为备份成功了 |
但真正恢复时:
1 | 才发现文件损坏 |
所以:
1 | 备份 ≠ 可恢复 |
一定要:
1 | 定期验证 |
总结
MySQL 常用命令:
| 功能 | 命令 |
|---|---|
| 导入数据库 | mysql < xxx.sql |
| 导出数据库 | mysqldump |
| 导出所有数据库 | –all-databases |
| 压缩备份 | gzip |
| 定时备份 | crontab |
推荐:
1 | mysqldump + gzip + crontab |
这是:
1 | 最经典的 MySQL 备份方案 |
非常适合:
- Ubuntu
- 云服务器
- 网站运维
- Docker
- VPS
- 企业生产环境