在Linux系统中使用MySQL进行数据导入是数据库管理中的常见操作,主要通过命令行工具实现,常用命令包括mysql、mysqlimport以及LOAD DATA INFILE等,这些方法适用于不同场景,如导入SQL脚本文件、CSV数据或其他文本格式数据,以下将详细介绍各种数据导入命令的使用方法、参数说明及注意事项。

使用mysql命令导入SQL脚本文件
mysql命令是MySQL自带的客户端工具,可直接执行SQL脚本或导入包含SQL语句的文件,基本语法为:
mysql -u [用户名] -p[密码] [数据库名] < [文件路径]
将backup.sql文件导入到testdb数据库中:
mysql -u root -p testdb < /path/to/backup.sql
参数说明:
-u:指定MySQL用户名,如root。-p:后接密码(也可空格后输入密码,但安全性较低)。[数据库名]:目标数据库名,若省略则需在SQL文件中指定数据库。<:输入重定向符号,将文件内容作为mysql命令的输入。
注意事项:

- 确保文件路径正确,且当前用户对文件有读取权限。
- 若SQL文件包含创建数据库或表的操作,需确保目标数据库已存在或使用
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS testdb"提前创建。
使用mysqlimport命令导入文本文件
mysqlimport是针对文本文件(如CSV、TSV)的导入工具,要求文件名与表名一致(不含扩展名),语法为:
mysqlimport -u [用户名] -p[密码] [选项] [数据库名] [文件路径]
导入users.csv到testdb数据库的users表:
mysqlimport -u root -p testdb --fields-terminated-by=, /path/to/users.csv
常用选项:
--fields-terminated-by:指定字段分隔符,如逗号()、制表符(\t)。--lines-terminated-by:指定行尾符,默认为\n。--ignore-lines:跳过文件前N行(如跳过CSV标题行)。-L:允许文件名包含非ASCII字符。
注意事项:

- 文件需为纯文本格式,且表结构需与文件列数、数据类型匹配。
mysqlimport会自动根据文件扩展名判断格式(如.csv默认逗号分隔)。
使用LOAD DATA INFILE语句导入数据
对于需要更精细控制的场景,可在MySQL客户端中使用LOAD DATA INFILE语句,语法如下:
LOAD DATA INFILE '[文件路径]' INTO TABLE [表名] FIELDS TERMINATED BY '[分隔符]' LINES TERMINATED BY '[行尾符]' IGNORE [数字] LINES;
导入data.txt到testdb.orders表:
LOAD DATA INFILE '/path/to/data.txt' INTO TABLE orders FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 LINES; -- 跳过首行标题
优势:
- 支持指定列导入(如
(col1, col3)),可跳过无关列。 - 可通过
SET子句修改数据,如SET col1 = UPPER(col1)。
注意事项:
- 文件路径需为MySQL服务器可访问的绝对路径(若客户端与服务器在同一主机,可用客户端路径)。
- 需确保MySQL对文件有读取权限,必要时修改
secure_file_priv参数(默认为/var/lib/mysql-files/)。
常见问题与解决方案
-
权限不足错误:
- 现象:
ERROR 1045 (28000): Access denied或ERROR 13 (HY000): Can't get stat of '/path/file'。 - 解决:检查用户权限(
GRANT FILE ON *.* TO 'user'@'host')及文件/目录权限(chmod 644 file)。
- 现象:
-
字符集乱码:
- 现象:导入后中文显示为问号或乱码。
- 解决:确保文件编码与数据库字符集一致(如
utf8mb4),可通过mysql --default-character-set=utf8mb4指定导入时字符集。
相关问答FAQs
Q1: 如何在导入时跳过重复键错误?
A: 可使用--ignore选项(mysqlimport)或IGNORE关键字(LOAD DATA INFILE),
mysqlimport --ignore --replace -u root -p testdb data.csv
或SQL语句中添加IGNORE或REPLACE选项,冲突时跳过或覆盖重复行。
Q2: 导入大文件时内存不足怎么办?
A: 可分批导入(如用split命令分割文件),或调整MySQL配置参数max_allowed_packet(默认4MB),在my.cnf中设置:
[mysqld] max_allowed_packet=256M
重启MySQL后生效,避免因单行数据过大导致导入失败。
