命令行导入MySQL数据库是数据库管理和开发中常见的操作,尤其适合处理大量数据或自动化脚本场景,本文将详细介绍通过命令行导入MySQL数据的多种方法、注意事项及实际应用技巧,帮助用户高效完成数据导入任务。

准备工作
在开始导入数据前,需确保以下条件满足:
- 环境配置:已安装MySQL服务器并启动,且命令行工具(如
mysql
客户端)可用,可通过mysql --version
检查版本。 - 权限验证:用于导入的用户需具备目标数据库的
INSERT
、CREATE
、ALTER
等权限(根据数据类型而定)。 - 文件准备:确保导入文件(如
.sql
、.csv
等)路径正确,且文件编码与数据库字符集一致(如UTF-8)。
常用导入方法
使用mysql
命令直接导入SQL文件
适用于导入包含SQL语句的脚本文件(如通过mysqldump
导出的结构化数据)。
基本语法:
mysql -u [用户名] -p[密码] [数据库名] < [文件路径]
示例:

mysql -u root -p123456 test_db < /path/to/data.sql
注意事项:
-p
后直接接密码时无空格,也可单独写-p
后手动输入密码(更安全)。- 若文件包含创建数据库语句,需确保目标数据库不存在或使用
--force
忽略错误。 - 大文件导入时,可能需要调整
max_allowed_packet
参数(在MySQL配置文件中设置)。
使用source
命令在MySQL客户端中导入
适用于交互式操作或需要分步执行的场景。
操作步骤:
mysql -u [用户名] -p[密码] [数据库名] source [文件路径];
示例:
mysql -u root -p test_db mysql> source /path/to/data.sql;
优势:
- 可实时查看导入过程中的错误信息。
- 支持中途停止并执行其他命令。
导入CSV文件
MySQL原生支持通过LOAD DATA INFILE
命令高效导入CSV数据。
语法:
LOAD DATA INFILE '[文件路径]' INTO TABLE [表名] FIELDS TERMINATED BY ',' -- 字段分隔符 ENCLOSED BY '"' -- 字段包围符 LINES TERMINATED BY '\n' -- 行分隔符 IGNORE 1 ROWS; -- 忽略表头
示例:
LOAD DATA INFILE '/var/lib/mysql-files/users.csv' INTO TABLE users FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS;
注意事项:
- 文件需位于MySQL服务器可访问的目录(如
/var/lib/mysql-files/
),或使用LOCAL
关键字从客户端读取(需LOCAL_INFILE
权限)。 - 字符集需与文件编码一致,可通过
CHARACTER SET utf8
指定。
使用第三方工具导入
对于复杂场景(如跨格式导入),可借助工具如mysqlimport
(命令行)或Navicat
(图形界面)。
mysqlimport
示例:
mysqlimport -u root -p123456 --local test_db /path/to/data.txt
--local
表示从客户端读取文件,需服务器配置支持。
高级技巧与常见问题
性能优化
- 分批导入:大文件可分割为小文件(如
split
命令)分批导入,避免锁表时间过长。 - 禁用索引:导入前临时禁用索引,导入后重建:
ALTER TABLE [表名] DISABLE KEYS; -- 导入数据 ALTER TABLE [表名] ENABLE KEYS;
- 事务控制:若引擎支持事务(如InnoDB),可通过
START TRANSACTION
和COMMIT
减少IO开销。
错误处理
- 编码问题:若导入后出现乱码,检查文件编码与数据库字符集(
SHOW VARIABLES LIKE 'character_set_database';
)。 - 权限不足:确保用户有
FILE
权限(用于LOAD DATA INFILE
)和目标库的操作权限。 - 路径错误:
LOAD DATA INFILE
需绝对路径,且MySQL服务器对该路径有读权限。
不同场景的对比
方法 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
mysql 命令 |
大型SQL脚本导入 | 简单直接,适合自动化 | 无法实时查看错误 |
source 命令 |
交互式调试或小文件导入 | 可中断执行,错误可视化 | 需登录客户端,不适合自动化 |
LOAD DATA INFILE |
CSV/TSV等结构化数据导入 | 速度快,资源占用低 | 需服务器文件权限,格式要求严格 |
mysqlimport |
单表批量导入(如.txt文件) | 自动匹配表名,简化操作 | 功能较单一,灵活性低 |
相关问答FAQs
Q1: 导入大SQL文件时提示“Packet too large”错误如何解决?
A1: 该错误因单条SQL语句超过max_allowed_packet
限制(默认4MB),可通过以下方式解决:
- 临时调整参数:
mysql -u root -p --max_allowed_packet=256M
(导入时指定)。 - 永久修改:在MySQL配置文件(
my.cnf
或my.ini
)中添加max_allowed_packet=256M
并重启服务。 - 分割大文件:使用
split -l 10000 large_file.sql small_file_
按行数分割后分批导入。
Q2: 如何验证导入数据的完整性?
A2: 可通过以下步骤验证:
- 记录数对比:导入前后执行
SELECT COUNT(*) FROM [表名];
,确保记录数一致。 - 抽样检查:随机查询部分数据,如
SELECT * FROM [表名] LIMIT 10;
,检查字段值是否正确。 - 校验和:若数据来自导出文件,可通过
md5sum
校验文件哈希值是否与原始文件一致。 - 日志分析:查看MySQL错误日志(
/var/log/mysql/error.log
),确认无导入相关报错。