MySQL作为全球最受欢迎的开源关系型数据库管理系统,其数据导入导出功能是日常运维和开发中不可或缺的操作,无论是数据迁移、备份恢复,还是跨系统数据交换,熟练掌握MySQL的导入导出命令都能显著提升工作效率,本文将详细介绍MySQL数据导入导出的多种方法,涵盖命令行工具、图形化工具及特定场景下的操作技巧,并通过表格对比不同工具的适用场景,最后附上常见问题解答。

数据导出命令
MySQL数据导出主要分为全量导出和选择性导出,常用工具包括mysqldump
、SELECT ... INTO OUTFILE
以及第三方工具如mysqlump
的扩展用法。
使用mysqldump导出数据
mysqldump
是MySQL官方提供的强大数据导出工具,支持导出数据库、表或查询结果,并可选择多种格式(如SQL、CSV、XML等)。
基本语法:
mysqldump -u [用户名] -p[密码] [选项] [数据库名] [表名] > [导出文件路径]
常用场景及示例:

-
导出整个数据库:
mysqldump -u root -p mydb > mydb_backup.sql
此命令会导出
mydb
数据库的所有表结构及数据,生成SQL文件,包含CREATE TABLE
语句和INSERT
语句。 -
导出特定表:
mysqldump -u root -p mydb table1 table2 > tables_backup.sql
仅导出
mydb
数据库中的table1
和table2
。(图片来源网络,侵删) -
导出表结构(不含数据):
mysqldump -u root -p --no-data mydb > mydb_structure.sql
通过
--no-data
选项仅导出表结构。 -
导出数据(不含结构):
mysqldump -u root -p --no-create-info mydb > mydb_data_only.sql
使用
--no-create-info
跳过CREATE TABLE
语句。 -
导出为CSV格式:
mysqldump -u root -p --tab=/path/to/export --fields-terminated-by=, mydb table1
--tab
选项会将表结构和数据分别导出为.sql
和.txt
文件,--fields-terminated-by
指定字段分隔符。 -
压缩导出:
mysqldump -u root -p mydb | gzip > mydb_backup.sql.gz
通过管道将输出压缩为gzip文件,节省存储空间。
使用SELECT ... INTO OUTFILE导出
此方法适用于将查询结果直接导出为文本文件(如CSV、TXT),适合特定数据筛选后的导出。
语法:
SELECT column1, column2 FROM table_name INTO OUTFILE '/path/to/file.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
注意事项:
- 文件路径必须是MySQL服务器可写的目录(如
/tmp/
),且需确保MySQL用户有写入权限。 - 导出文件会被MySQL服务器直接创建,客户端无法指定本地路径。
其他导出工具
- phpMyAdmin:通过Web界面选择数据库或表,点击“导出”按钮,可选择格式(SQL、CSV、Excel等)并压缩。
- MySQL Workbench:提供图形化导出向导,支持定制导出选项(如是否包含数据、事件、触发器等)。
数据导入命令
MySQL数据导入对应导出操作,主要包括mysql
命令行工具、LOAD DATA INFILE
以及图形化工具的导入功能。
使用mysql命令导入
mysql
工具是MySQL官方提供的客户端,可直接执行SQL文件或交互式导入数据。
基本语法:
mysql -u [用户名] -p[密码] [数据库名] < [导入文件路径]
示例:
-
导入SQL文件:
mysql -u root -p mydb < mydb_backup.sql
将
mydb_backup.sql
文件导入到mydb
数据库中。 -
交互式导入:
mysql -u root -p
登录后执行
source /path/to/file.sql;
命令导入文件。
使用LOAD DATA INFILE导入
此方法与SELECT ... INTO OUTFILE
对应,用于快速将文本文件(如CSV)导入到表中。
语法:
LOAD DATA INFILE '/path/to/file.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' (column1, column2);
注意事项:
- 文件路径必须是MySQL服务器可读的路径。
- 若文件包含标题行,需使用
IGNORE 1 LINES
跳过:LOAD DATA INFILE '/path/to/file.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' IGNORE 1 LINES;
其他导入工具
- phpMyAdmin:选择目标数据库,点击“导入”按钮,选择文件并设置编码格式。
- MySQL Workbench:通过“Server”菜单选择“Data Import”或“Restore”,支持导入SQL、CSV及压缩包。
工具对比与适用场景
工具/方法 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
mysqldump | 全库/表备份、跨版本迁移 | 功能强大,支持多种格式和选项 | 大数据量时性能较低 |
SELECT INTO OUTFILE | 筛选后数据导出(如报表数据) | 直接生成文本文件,无需中间步骤 | 需服务器权限,路径受限 |
mysql | SQL文件导入、日常数据恢复 | 简单高效,适合命令行操作 | 仅支持SQL格式导入 |
LOAD DATA INFILE | 大文本文件(如CSV)快速导入 | 速度极快,适合大数据量 | 需文件在服务器端,格式固定 |
phpMyAdmin | 小型数据库管理,Web界面操作 | 直观易用,支持多种格式 | 大数据量时易超时,需Web环境 |
MySQL Workbench | 复杂导入导出,可视化操作 | 图形化界面,支持高级选项 | 依赖客户端环境,配置较复杂 |
相关问答FAQs
Q1: 使用mysqldump导出大表时如何避免超时或内存不足?
A1: 可通过以下方式优化:
- 使用
--single-transaction
选项(适用于InnoDB引擎),避免锁表且保证数据一致性:mysqldump -u root -p --single-transaction mydb big_table > big_table.sql
- 分批导出:通过
--where
选项添加条件分批导出,如:mysqldump -u root -p --where="id BETWEEN 1 AND 100000" mydb big_table > batch1.sql
- 压缩导出:通过管道压缩减少I/O压力,如:
mysqldump -u root -p mydb big_table | gzip > big_table.sql.gz
Q2: 导入CSV文件时出现“The MySQL server is running with the --secure-file-priv option”错误如何解决?
A2: 该错误是因为MySQL服务器限制了LOAD DATA INFILE
和SELECT INTO OUTFILE
的文件目录,解决方法:
- 查看当前
secure-file-priv
设置:SHOW VARIABLES LIKE 'secure_file_priv';
- 将CSV文件移动到返回的目录(如
/var/lib/mysql-files/
),或修改MySQL配置文件(my.cnf
或my.ini
)设置自定义路径:[mysqld] secure-file-priv = "/custom/path"
重启MySQL服务后即可使用自定义路径。
通过以上方法,用户可根据实际需求选择合适的导入导出策略,高效完成MySQL数据的迁移与备份工作。