MySQL 数据备份与导入导出命令详解

山间有风
山间有风
发布时间:2026-10-13| 5人浏览过
原创

掌握 MySQL 的数据备份与迁移是数据库管理的核心技能。本文深入解析 mysqldump、SELECT...INTO OUTFILE 及 LOAD DATA INFILE 三大核心工具,提供从完整库备份、结构分离导出到高效文本数据交换的实战命令示例,助力提升数据安全管理与流转效率。

一、mysqldump:通用逻辑备份方案

mysqldump 是 MySQL 社区版中最常用的逻辑备份客户端实用程序。它通过向服务器发送 SQL 语句(如 CREATE TABLE 和 INSERT),生成一个可恢复的 SQL 脚本文件。相比物理备份,逻辑备份具有跨版本兼容性好、便于查看和修改内容的优势。

语法基础

调用 mysqldump 主要有三种形式:

  • 备份指定库中的部分表:mysqldump [options] db_name [tables]
  • 备份指定列表中的多个数据库:mysqldump [options] --database DB1 [DB2 DB3...]
  • 备份服务器上的所有数据库:mysqldump [options] --all-databases

第1步:备份单个数据库(结构与数据)

适用于日常关键业务数据的完整快照。

# 导出 mysql 库的结构和数据至 mysql_backup.sql
# -u: 用户名, -p: 密码提示符(生产环境建议不直接显示在命令中)
mysqldump -uroot -p123456 mysql > mysql_backup.sql

注意:默认情况下,生成的 SQL 文件中不包含创建目标数据库本身(CREATE DATABASE)的语句。如果需要在另一台全新服务器上恢复,需先手动创建同名数据库。

第2步:批量备份多个指定数据库

当需要同时保护多个业务库时,使用 --database 选项。

# 同时备份 mysql 和 test 库
mysqldump -u root -p123456 --database mysql test > my_databases.sql

区别:此方式生成的 SQL 文件中会包含创建这两个数据库的语句,恢复时更为便捷。

第3步:执行全库备份

# 备份所有系统库及用户库
mysqldump -u root -p123456 --all-databases > all_databases.sql

第4步:仅导出表结构(不含数据)

适用于代码版本控制或生成数据库 schema 文档的场景。

# -d: 不导出数据, --add-drop-table: 每条 create 前加 drop table 语句
mysqldump -u root -p123456 -d mysql > mysql_define.sql

第5步:带压缩的全量备份

对于大型数据库,直接在导出过程中使用 gzip 压缩,可大幅节省磁盘空间并提高 I/O 效率。

# 使用管道将输出重定向至 gzip 压缩
mysqldump -u root -p123456 mysql | gzip > mysql.sql.gz

二、还原逻辑备份文件

将上述命令生成的备份数据恢复到 MySQL 服务器中。操作前请确保目标数据库已存在(除非备份文件中包含建库语句)且权限充足。

方式 A:命令行标准输入

# 从 SQL 脚本还原
mysql -u root -p123456 db_name < backup-file.sql

方式 B:SQL 内部源命令

# 在 MySQL 客户端内部执行
mysql -e "source /path-to/backup-file.sql" db_name

方式 C:还原压缩备份

# 先解压再导入,或使用管道实时处理
gunzip < mysql.sql.gz | mysql -u root -p123456 test

风险提示:逻辑备份还原速度受网络带宽和服务器性能影响较大,且无法保证数据的一致性(如果在备份期间有并发写入)。如需严格一致性,请配合锁表或使用二进制日志(Binlog)进行增量修复。


三、高速文本数据交换:SELECT INTO OUTFILE

SELECT ... INTO OUTFILE 是 MySQL 用于将查询结果集以纯文本格式导出到服务器主机文件系统的高效命令。它是 LOAD DATA INFILE 的逆向操作,常用于与其他应用程序(如报表工具、爬虫脚本)交换数据。

安全限制:出于安全考虑,该命令只能写入服务器指定的目录(通常由 secure_file_priv 变量控制),且不能覆盖已有文件。

实战:导出为 CSV 格式

以下命令将 mysql.user 表导出为标准的逗号分隔值文件,适用于 Excel 或其他软件打开。

SELECT * INTO OUTFILE '/tmp/result.txt'
FIELDS TERMINATED BY ','        # 字段间用逗号分隔
OPTIONALLY ENCLOSED BY '"'     # 字符串字段可选地用双引号包裹
LINES TERMINATED BY '\n'       # 记录间换行
FROM mysql.user;

局限性:此方法仅导出数据内容,不导出表结构(DDL)。若需在无结构的数据库中还原,必须搭配 LOAD DATA INFILE 使用。


四、高速文本数据导入:LOAD DATA INFILE

LOAD DATA INFILE 是 MySQL 中最快的数据加载方式,比传统的 INSERT 语句快约 20 倍。它读取服务器本地(或指定路径)的文本文件,并按指定格式将其解析后插入表中。

实战:将 CSV 数据导入表

假设之前已从 mysql.user 导出了 /tmp/result.txt,现在将其导入到 test 数据库的 user 表中:

LOAD DATA LOCAL INFILE '/tmp/result.txt' 
INTO TABLE test.user
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n'

关键参数说明

  • LOCAL:指示客户端从客户端机器读取文件而非服务器机器。这在跨机器传输数据时非常有用,但需要服务器配置允许。
  • REPLACE INTO vs INSERT INTO:如果使用 REPLACE,遇到主键冲突时会删除旧记录并插入新记录;使用 INSERT 则会在冲突时报错。

五、文件格式配置速查

在编写 SELECT ... INTO OUTFILE 和 LOAD DATA INFILE 时,格式定义必须一致,否则会导致数据错位。核心配置如下:

子句名称 作用 常见示例
FIELDs TERMINATED BY 定义字段结束符 ',' (CSV), '\t' (TSV)
OPTIONALLY ENCLOSED BY 定义字符串包围符,数值型不受此影响 '"', ''
LINES TERMINATED BY 定义记录(行)结束符 '\n' (Linux), '\r\n' (Windows)

以上就是 MySQL 导入导出命令的详细解析,更多关于数据库优化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。