Linux命令-mysqlimport(为MySQL服务器用命令行方式导入数据)

张开发
2026/4/3 13:51:36 15 分钟阅读
Linux命令-mysqlimport(为MySQL服务器用命令行方式导入数据)
mysqlimport是 MySQL 数据库的数据导入工具专门用于从文本文件如 CSV、TSV 等格式快速导入数据到 MySQL 表中。它实际上是LOAD DATA INFILE语句的命令行接口提供了更便捷的批量数据导入方式。 基本语法mysqlimport[选项]数据库名 文本文件...重要特性mysqlimport根据文件名确定目标表名去掉扩展名。例如文件users.txt将被导入到users表中。可以同时导入多个文件每个文件对应一个表。 常用选项选项说明-u,--user用户名连接数据库的用户名。-p,--password[密码]连接数据库的密码。-h,--host主机名连接数据库的主机名。-P,--port端口号连接数据库的端口号。-S,--socket套接字文件用于连接的 Unix 套接字文件。-c,--columns列列表指定要导入的列及其顺序用逗号分隔。-d,--delete导入前先清空目标表。-f,--force遇到错误继续执行。-i,--ignore如果导入的数据与已有数据有唯一键冲突则忽略新数据。-r,--replace如果导入的数据与已有数据有唯一键冲突则替换已有数据。-l,--lock-tables处理每个表前先锁定该表。-L,--local从客户端读取文件默认从服务器读取。--fields-terminated-by字符串指定字段分隔符默认是制表符\t。--fields-enclosed-by字符指定字段包围字符如引号。--fields-optionally-enclosed-by字符指定字段可选的包围字符。--fields-escaped-by字符指定转义字符默认是反斜线\。--lines-terminated-by字符串指定行终止符默认是换行符\n。--ignore-linesN忽略文件开头的 N 行通常用于跳过标题行。--default-character-set字符集指定文件的字符集如 utf8, gbk。-v,--verbose详细模式显示更多信息。-V,--version显示版本信息。-C,--compress启用客户端/服务器协议压缩。-s,--silent静默模式只输出错误信息。 核心用法示例1. 基本导入# 导入 CSV 文件到对应的表文件名为 users.csv对应 users 表mysqlimport-uroot-pmydatabase users.csv# 导入多个文件mysqlimport-uroot-pmydatabase users.csv orders.csv products.csv2. 指定分隔符# 导入 CSV 文件逗号分隔mysqlimport-uroot-p--fields-terminated-by,mydatabase users.csv# 导入 TSV 文件制表符分隔mysqlimport-uroot-p--fields-terminated-by\tmydatabase users.tsv# 自定义分隔符mysqlimport-uroot-p--fields-terminated-by|mydatabase users.txt3. 处理引号和转义# 字段用双引号包围mysqlimport-uroot-p--fields-enclosed-bymydatabase users.csv# 字段可选用双引号包围mysqlimport-uroot-p--fields-optionally-enclosed-bymydatabase users.csv# 自定义转义字符mysqlimport-uroot-p--fields-escaped-by\\mydatabase users.csv4. 行终止符# Windows 格式的 CSV回车换行mysqlimport-uroot-p--lines-terminated-by\r\nmydatabase users.csv# Unix 格式换行mysqlimport-uroot-p--lines-terminated-by\nmydatabase users.csv5. 导入选项# 导入前清空表mysqlimport-uroot-p--deletemydatabase users.csv# 忽略重复记录mysqlimport-uroot-p--ignoremydatabase users.csv# 替换重复记录mysqlimport-uroot-p--replacemydatabase users.csv# 忽略标题行跳过第一行mysqlimport-uroot-p--ignore-lines1mydatabase users.csv6. 指定列# 只导入部分列并指定顺序mysqlimport-uroot-p--columnsid,name,email mydatabase users.csv# 跳过文件中的某些列mysqlimport-uroot-p--columnsname,age,email mydatabase users.csv 高级用法1. 从标准输入导入# 从管道导入catusers.csv|mysqlimport-uroot-pmydatabase -# 注意标准输入时需要使用 - 作为文件名且表名需要额外指定2. 批量导入多个文件# 使用循环导入多个文件forfilein*.csv;domysqlimport-uroot-pmydatabase$filedone# 使用 xargsfind.-name*.csv-print0|xargs-0-I{}mysqlimport-uroot-pmydatabase{}3. 从压缩文件导入# 解压并导入gzip-dcusers.csv.gz|mysqlimport-uroot-pmydatabase -4. 远程导入# 从远程服务器导入sshuserremotehostcat /path/to/data.csv|mysqlimport-uroot-pmydatabase -# 导入到远程 MySQL 服务器mysqlimport-hremote_host-uremote_user-pmydatabase data.csv⚠️ 重要注意事项文件位置默认情况下mysqlimport从服务器端读取文件。如果使用--local选项则从客户端读取文件。使用--local时文件需要在运行mysqlimport命令的机器上。权限要求如果使用服务器端读取需要 MySQL 用户有FILE权限且文件需要在服务器上。如果使用客户端读取--local需要 MySQL 用户有INSERT权限。文件格式确保文件格式与表结构匹配否则导入会失败。性能优化导入大量数据时可以考虑以下优化在导入前禁用索引使用--local减少网络传输增大max_allowed_packet参数 示例完整的 CSV 导入流程假设有一个users.csv文件id,name,email,age 1,John Doe,johnexample.com,30 2,Jane Smith,janeexample.com,25 3,Bob Johnson,bobexample.com,35步骤 1创建表CREATETABLEusers(idINTPRIMARYKEY,nameVARCHAR(50),emailVARCHAR(100),ageINT);步骤 2导入数据# 导入 CSV 文件跳过标题行mysqlimport-uroot-p--fields-terminated-by,--ignore-lines1mydatabase users.csv 与LOAD DATA INFILE对比mysqlimport实际上是LOAD DATA INFILE的包装。两者功能对应关系功能mysqlimport选项LOAD DATA INFILE子句字段分隔符--fields-terminated-byFIELDS TERMINATED BY字段包围字符--fields-enclosed-byFIELDS ENCLOSED BY行终止符--lines-terminated-byLINES TERMINATED BY忽略行--ignore-linesIGNORE n LINES替换重复记录--replaceREPLACE忽略重复记录--ignoreIGNORE等价示例# mysqlimportmysqlimport-uroot-p--fields-terminated-by,--ignore-lines1mydatabase users.csv# 对应的 LOAD DATA INFILEmysql-uroot-p-eLOAD DATA INFILE users.csv INTO TABLE users FIELDS TERMINATED BY , IGNORE 1 LINESmydatabase️ 故障排除1. 权限错误# 错误The MySQL server is running with the --secure-file-priv option# 解决方案检查 secure_file_priv 设置mysql-uroot-p-eSHOW VARIABLES LIKE secure_file_priv;# 如果设置了路径将文件放在该路径下# 或者修改配置文件 my.cnf2. 字符编码问题# 指定正确的字符集mysqlimport-uroot-p--default-character-setutf8 mydatabase users.csv3. 字段不匹配# 查看表结构mysql-uroot-p-eDESCRIBE usersmydatabase# 调整导入列的顺序mysqlimport-uroot-p--columnsid,name,age,email mydatabase users.csv4. 文件找不到# 使用 --local 从客户端读取mysqlimport-uroot-p--localmydatabase users.csv 最佳实践备份数据在导入前备份目标表。测试导入先在小规模数据上测试导入命令。使用事务对于重要数据可以在一个事务中导入以便出错时回滚。监控性能导入大量数据时监控服务器性能。mysqlimport是一个非常高效的数据导入工具特别适合批量导入格式化文本数据。掌握其用法可以大大提高数据迁移和处理的效率。

更多文章