备份与实用命令
MySQL 用 mysqldump 导出 .sql、用 mysql < 或 source 还原;复制表与备份的区别,以及常用运维小命令。
本页目录
误 DROP TABLE、硬盘坏了、要换机器——这些都不是「多练几遍 SQL」能避免的,要靠备份。今天用 mysqldump 做导出与还原,并顺带整理几条常用命令。
系列:MySQL 入门到查询 · 第 16 / 17 篇(第 16 天 · 5 月 6 日)
上一篇:约束
下一篇:综合练习与面试题
总目录:系列索引
环境说明
- 系统:Windows(路径示例用
D:\;Linux/macOS 换成/tmp/...等) - 库:
train - 工具:
mysqldump.exe与mysql.exe同在 MySQL 的bin目录(第 2 天已配置 Path) - 备份/还原命令多在退出
mysql>之后的系统终端里执行
准备练习数据:
use train;
drop table if exists backup_demo;
create table backup_demo(
id int primary key,
name varchar(20) not null
);
insert into backup_demo values(1,'alpha'),(2,'beta'),(3,'gamma');
select * from backup_demo;
1. 为什么要备份
| 场景 | 没有备份时 |
|---|---|
| 误删表/库 | 数据可能瞬间消失 |
| 硬盘故障 | 同一机器上的表全没了 |
| 换服务器 / 迁移 | 需要把结构+数据搬到另一台 MySQL |
原则:重要环境定期备份;重要操作前先备份。
2. 「复制表」和「备份文件」不是一回事
| 方式 | 例子 | 局限 |
|---|---|---|
| 同库/同实例复制表 | create table bak select * from 原表 | 仍在同一台 MySQL / 同一磁盘风险域 |
| 导出 .sql | mysqldump ... > xxx.sql | 文件可拷到 U 盘、其他机器,跨机迁移的基础 |
-- 登录 mysql 后:同实例备份(简单,但防不了整机盘故障)
create table backup_demo_bak select * from backup_demo;
课堂常说:正式备份更推荐 mysqldump 生成独立 .sql 文件。
3. mysqldump:导出(备份)
3.1 在哪里执行?
在操作系统终端(不是 mysql>):
# 先退出 mysql,若已在其中
# \q 或 quit 或 exit
mysqldump -uroot -p train > D:\train_all.sql
| 部分 | 含义 |
|---|---|
mysqldump | 导出工具(在 bin 目录) |
-uroot -p | 数据库用户;密码可回车再输,或 -p密码(注意粘连、无空格) |
train | 要备份的库名 |
> | 重定向,把导出内容写进文件 |
D:\train_all.sql | 保存路径(建议 .sql 结尾) |
导出整库:
mysqldump -uroot -p train > D:\train_all.sql
只导出一张表:
mysqldump -uroot -p train backup_demo > D:\train_demo.sql
语法:
mysqldump -u用户 -p密码 库名 [表名] > 文件路径
3.2 .sql 文件里是什么?
用记事本/VS Code 打开 train_all.sql,通常能看到:
DROP TABLE IF EXISTS ...(默认导出里通常会有)CREATE TABLE ...INSERT INTO ...
也就是:结构 + 数据 的一组 SQL,不是二进制专有格式。
3.3 Linux / macOS 示例
mysqldump -uroot -p train > /tmp/train_all.sql
mysqldump -uroot -p train backup_demo > /tmp/train_demo.sql
4. 还原(导入)
4.1 方式一:mysql 命令(在未登录 mysql 时)
mysql -uroot -p train < D:\train_all.sql
| 要点 | 说明 |
|---|---|
| 在系统终端执行 | 不要停在 mysql> |
< | 把文件内容读给 mysql 执行 |
| 目标库 | 命令里的 train 要已经存在 |
若库不存在:
# 先登录 mysql 创建空库再退出,例如
# create database train charset utf8mb4;
# 然后在终端:
mysql -uroot -p train < D:\train_all.sql
4.2 方式二:source(已登录 mysql,且已 use 目标库)
mysql -uroot -p
use train;
source D:/train_demo.sql
-- Linux 示例:source /tmp/train_demo.sql
屏幕上可能连续出现很多 Query OK,表示文件里的语句在逐条执行。
| 方式 | 在哪执行 | 适用 |
|---|---|---|
mysql ... < 文件 | 系统终端 | 大文件,通常更快 |
source 文件 | mysql> 内,且已 use 库 | 小文件、课堂演示方便 |
5. 完整「备份 → 故障 → 还原」实验
5.1 备份
系统终端:
mysqldump -uroot -p train > D:\train_all.sql
mysqldump -uroot -p train backup_demo > D:\train_demo.sql
dir D:\train_*.sql
(Linux:ls -l /tmp/train_*.sql)
5.2 模拟故障
mysql -uroot -p
use train;
show tables;
drop table backup_demo;
show tables;
5.3 用文件还原
终端(方式一):
mysql -uroot -p train < D:\train_all.sql
或只还原 demo 表的备份:
mysql -uroot -p train < D:\train_demo.sql
验证:
mysql -uroot -p
use train;
show tables;
select * from backup_demo;
5.4 用 source 还原(方式二)
use train;
drop table backup_demo;
source D:/train_demo.sql
select * from backup_demo;
6. 备份习惯建议(入门版)
| 建议 | 原因 |
|---|---|
| 文件名带库名与日期 | 如 train_2026-05-06.sql |
| 放到系统盘以外 | 例 D:\backups\ 或独立目录 |
| 重要操作前先导出 | 改结构、批量删数据前 |
| 多处保存 | 本机 + 移动盘/网盘(注意权限与加密) |
| 生产用更完整方案 | 定时任务、binlog、云备份等(进阶,非本篇范围) |
安全:
.sql可能含表结构甚至业务数据,不要随意外传;密码不要写进可公开的脚本明文。
7. 常用实用命令速查(串起来)
7.1 系统终端(未登录 mysql)
mysql -uroot -p # 登录
mysql -uroot -p -h 192.168.56.10 # 远程
mysqldump -uroot -p train > /path/train.sql
mysql -uroot -p train < /path/train.sql
7.2 mysql> 内
show databases;
use train;
show tables;
desc backup_demo;
select * from backup_demo;
select version();
source /path/train_demo.sql;
\q
7.3 和前文命令的关系
| 场景 | 选用 |
|---|---|
| 表里改几行数据 | update / delete |
| 同库另存一张表 | create table ... select ... |
| 跨机器、防整盘丢失 | mysqldump + .sql 文件 |
| 换机器恢复 | mysql < 或 source |
8. 完整跟练脚本(建议按序)
A. 登录 mysql 准备表
use train;
drop table if exists backup_demo;
create table backup_demo(id int primary key, name varchar(20) not null);
insert into backup_demo values(1,'alpha'),(2,'beta'),(3,'gamma');
select * from backup_demo;
\q
B. 系统终端备份
mysqldump -uroot -p train > D:\train_all.sql
mysqldump -uroot -p train backup_demo > D:\train_demo.sql
C. 制造故障并还原
mysql -uroot -p
use train;
drop table backup_demo;
show tables;
\q
mysql -uroot -p train < D:\train_all.sql
mysql -uroot -p
use train;
show tables;
select * from backup_demo;
9. 速查表
| 目标 | 命令 |
|---|---|
| 导出整个库 | mysqldump -u用户 -p 库名 > 文件.sql |
| 导出一张表 | mysqldump -u用户 -p 库名 表名 > 文件.sql |
| 终端还原 | mysql -u用户 -p 库名 < 文件.sql |
| 客户端内还原 | use 库; 后 source 路径/文件.sql |
| 备份文件 | 通常是 .sql 文本 |
| 大数据导入 | 优先 mysql <(终端方式) |
10. 今天的练习清单
- 准备
train.backup_demo三行数据 - 系统终端执行
mysqldump导出整库与单表 - 用记事本打开
.sql,找到CREATE/INSERT -
drop table backup_demo后用mysql <还原 - 再
drop,改用source还原 - 对比:同库
create table ... select与导出文件的区别(一句话)
常见错误
易错:在
mysql>提示符里执行mysqldump ... > ...——应先\q回到系统终端。
易错:source前忘记use 目标库。
易错:还原时目标库不存在。
易错:Windows 路径写错盘符/文件名;或 Linux 用了不存在的目录。
易错:-p与密码之间多空格(会被当成另一参数)。
易错:把备份文件放在系统盘且无第二份,机器故障时一起丢。
小结
- 重要数据要能导出成
.sql,而不是只在同机复制表。 - 导出:
mysqldump ... > 文件(系统终端)。 - 还原:
mysql 库 < 文件或登录后use 库; source 文件。 - 大文件优先终端
<导入;导出/导入前先确认库存在、路径正确。 - 下一篇 综合练习与面试题:把 00–16 串成小项目场景。