MySQL

备份与实用命令

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 / 同一磁盘风险域
导出 .sqlmysqldump ... > 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 与密码之间多空格(会被当成另一参数)。
易错:把备份文件放在系统盘且无第二份,机器故障时一起丢。

小结

  1. 重要数据要能导出成 .sql,而不是只在同机复制表。
  2. 导出:mysqldump ... > 文件(系统终端)。
  3. 还原:mysql 库 < 文件 或登录后 use 库; source 文件。
  4. 大文件优先终端 < 导入;导出/导入前先确认库存在、路径正确。
  5. 下一篇 综合练习与面试题:把 00–16 串成小项目场景。

系列导航:总目录 · 上一篇:约束 · 下一篇:综合练习与面试题

相关阅读

全部文章 →
← 返回列表更多「MySQL」