首页 >> 工具知识

mysql命令-mysqlimport

概述

mysqlimport 是 MySQL 提供的一个命令行工具,用于将文本文件(如 CSV、TSV 等格式)的数据快速导入到 MySQL 数据库中。它实际上是 LOAD DATA INFILE 语句的命令行接口。

基本语法

mysqlimport [选项] 数据库名 文本文件1 [文本文件2 ...]

主要特点

  1. 批量导入:高效地将大量数据导入数据库

  2. 文件与表映射:文件名(不含扩展名)对应目标表名

  3. 多文件支持:可以一次导入多个文件到不同的表

常用选项详解

连接选项

-u, --user=用户名           # 指定用户名 -p, --password[=密码]      # 指定密码(使用=或不带=) -h, --host=主机名          # 连接的主机 -P, --port=端口号          # 连接端口 --protocol=协议           # 连接协议(tcp, socket, pipe等)

导入控制选项

--ignore                  # 忽略重复键错误,继续导入 --replace                 # 替换重复键的记录 --delete                  # 导入前清空目标表 --local                   # 从客户端读取文件(默认从服务器) -L, --lock-tables         # 导入前锁定所有表 --low-priority            # 使用低优先级插入 --force                   # 即使遇到错误也继续执行 --silent, -s             # 静默模式,减少输出 --verbose, -v            # 详细模式

文件格式选项

--fields-terminated-by=字符串  # 字段分隔符(默认:\t) --fields-enclosed-by=字符      # 字段包围符(默认:无) --fields-optionally-enclosed-by=字符 # 可选字段包围符 --fields-escaped-by=字符      # 转义字符(默认:\\) --lines-terminated-by=字符串   # 行终止符(默认:\n) --columns=列名列表           # 指定要导入的列及顺序 --ignore-lines=N            # 忽略前N行(如标题行)

使用示例

基本示例

# 导入CSV文件到testdb数据库的employees表 # 文件名必须是 employees.txt 或 employees.csv mysqlimport -u root -p testdb employees.csv

# 指定分隔符为逗号 mysqlimport -u root -p --fields-terminated-by=',' testdb employees.csv

# 忽略标题行(第一行) mysqlimport -u root -p --ignore-lines=1 --fields-terminated-by=',' testdb employees.csv

复杂示例

# 导入CSV文件,指定列的顺序 mysqlimport -u root -p \   --columns=id,name,email,hire_date \   --fields-terminated-by=',' \   --fields-enclosed-by='"' \   --lines-terminated-by='\r\n' \   --ignore \   testdb employees.csv

# 从客户端导入本地文件 mysqlimport -u root -p \   --local \   --fields-terminated-by='|' \   --lines-terminated-by='\n' \   --verbose \   testdb sales.txt

批量导入多个文件

# 导入orders.txt到orders表,customers.txt到customers表 mysqlimport -u root -p testdb orders.txt customers.txt

文件命名规则

mysqlimport 要求文本文件的基本名(不含扩展名)必须与目标表名一致:

  • employees.csv → employees 表

  • orders_2023.txt → orders_2023 表

  • customer_data.csv → customer_data 表

注意事项

1. 权限要求

-- 需要文件权限(如果使用--local选项则不需要) GRANT FILE ON *.* TO '用户名'@'主机';

2. 安全性考虑

# 使用--local选项从客户端读取文件(更安全) mysqlimport --local -u root -p testdb data.txt

# 避免在命令行直接写密码 mysqlimport -u root -p testdb data.txt # 然后交互式输入密码

3. 常见问题处理

# 错误:Table 'xxx' doesn't exist # 解决方案:确保表已存在且文件名正确

# 错误:Access denied for user # 解决方案:检查用户权限,特别是FILE权限

# 错误:The MySQL server is running with --secure-file-priv # 解决方案:将文件放在允许的目录或修改服务器配置

4. 性能优化

# 导入前禁用索引 ALTER TABLE 表名 DISABLE KEYS; # 导入后重建索引 ALTER TABLE 表名 ENABLE KEYS;

# 使用扩展插入(mysqlimport自动处理) # 调整bulk_insert_buffer_size SET bulk_insert_buffer_size = 1024 * 1024 * 64;

与LOAD DATA INFILE对比

特性

mysqlimport

LOAD DATA INFILE

使用方式

命令行工具

SQL语句

多文件导入

支持

不支持

灵活性

较低

更高

错误处理

有限选项

完整控制

脚本集成

适合shell脚本

适合存储过程

实用技巧

1. 日志记录

# 记录导入过程 mysqlimport -u root -p --verbose testdb data.txt 2>&1 | tee import.log

2. 进度监控

# 使用pv工具显示进度 pv data.txt | mysqlimport -u root -p testdb /dev/stdin

3. 预处理数据

# 使用sed预处理数据 sed '1d' original.csv | mysqlimport -u root -p testdb /dev/stdin

4. 从压缩文件导入

# 解压并导入 gunzip -c data.csv.gz | mysqlimport -u root -p --fields-terminated-by=',' testdb /dev/stdin

示例配置文件

# ~/.my.cnf 配置连接参数 [mysqlimport] user=myuser password=mypassword host=localhost port=3306 local=1

最佳实践

  1. 始终备份:导入前备份目标表

  2. 测试导入:先用少量数据测试格式

  3. 检查编码:确保文件编码与数据库一致

  4. 使用事务:大文件导入考虑使用事务

  5. 监控资源:大型导入时监控服务器资源

常见错误代码

错误 1045: 访问被拒绝 错误 1148: 命令不允许 错误 1261: 行格式不正确 错误 1290: --secure-file-priv选项限制 错误 1062: 重复键值

通过合理使用 mysqlimport,可以高效地将文本数据导入 MySQL 数据库,特别适合批量数据迁移和ETL处理场景。

所有评论

最新文章
20.5 性能优化建议2026-05-08
20.4 复杂查询实现2026-05-08
20.3 表创建与数据初始化2026-05-08
20.2 数据库设计2026-05-08
20.1 项目需求分析:博客系统2026-05-08
19.4 自动化备份策略2026-05-08
19.3 导出和导入数据2026-05-08
19.2 恢复备份数据2026-05-05
19.1 使用mysqldump备份数据2026-05-05
18.4 实战:开发简单的学生管理系统2026-05-05
关于我 备案号:蜀ICP备2023042032号-1