首页 >> 工具知识
mysql命令-mysqlimport
概述
mysqlimport 是 MySQL 提供的一个命令行工具,用于将文本文件(如 CSV、TSV 等格式)的数据快速导入到 MySQL 数据库中。它实际上是 LOAD DATA INFILE 语句的命令行接口。
基本语法
mysqlimport [选项] 数据库名 文本文件1 [文本文件2 ...]
主要特点
批量导入:高效地将大量数据导入数据库
文件与表映射:文件名(不含扩展名)对应目标表名
多文件支持:可以一次导入多个文件到不同的表
常用选项详解
连接选项
-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
最佳实践
始终备份:导入前备份目标表
测试导入:先用少量数据测试格式
检查编码:确保文件编码与数据库一致
使用事务:大文件导入考虑使用事务
监控资源:大型导入时监控服务器资源
常见错误代码
错误 1045: 访问被拒绝 错误 1148: 命令不允许 错误 1261: 行格式不正确 错误 1290: --secure-file-priv选项限制 错误 1062: 重复键值
通过合理使用 mysqlimport,可以高效地将文本数据导入 MySQL 数据库,特别适合批量数据迁移和ETL处理场景。
最新文章
mysql命令-mysqlimport2026-02-01
mysql命令-mysql_tzinfo_to_sql2026-02-01
mysql命令-mysql2026-02-01
mysql命令-my_print_defaults2026-02-01
mysql命令-mysqldumpslow2026-02-01
mysql命令-mysqld2026-02-01
mysql命令-mysql_secure_installation2026-02-01
mysql命令-myisampack2026-02-01
mysql命令-perror2026-02-01
mysql命令-mysqldump2026-02-01
