【问题标题】:MySQL - LOAD DATA LOCAL INFILE shell script not workingMySQL - LOAD DATA LOCAL INFILE shell 脚本不起作用
【发布时间】:2021-02-17 12:22:36
【问题描述】:

有人可以帮忙吗,我是 mysql 新手,我注意到“LOAD DATA LOCAL INFILE”在 mysql 事件调度程序中无法从正常的 .csv 更新我的数据库

所以我试图在 linux 中设置一个“cron 作业”来运行一个 shell 脚本来对我的数据库执行 LOAD DATA INFILE,但是我在以下 shell 脚本上遇到错误,请帮助纠正它,请参阅我的脚本下面的布局...

#!/bin/bash
mysql -u root -p xxxxxxx testdb --local_infile=1 -e"LOAD DATA LOCAL INFILE '/mnt/mysqldb/mysqldb-new/mysql/CK-BATCH-FTP/Acelity/activity.csv' 
INTO TABLE acelity_activity
FIELDS TERMINATED BY ';'
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

谢谢你帮助我

【问题讨论】:

  • 错误信息显示什么? (附加到问题)
  • @PaulT。错误消息指出以下内容:在寻找匹配的 `' ' 时出现意外的 EOF
  • 嗨@PaulT。你对这个问题有任何进一步的更新吗?也许对更正脚本有一些帮助?

标签: mysql shell sh


【解决方案1】:

您必须将双引号括在 ENCLOSED BY 中,我认为您的原始代码中有一个最终确定的双引号

#!/bin/bash 
mysql -u root -p xxxxxxx testdb --local_infile=1 -e"LOAD DATA LOCAL INFILE '/mnt/mysqldb/mysqldb-new/mysql/CK-BATCH-FTP/Acelity/activity.csv' 
INTO TABLE acelity_activity
FIELDS TERMINATED BY ';'
ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;"

你应该在 wokbench 或 phpmyadmin 中测试命令

【讨论】:

  • 感谢您对脚本的更正,所以我运行它没有任何错误,但它没有导入任何东西,在我运行脚本后,我得到以下内容,它只是给了我完整的“帮助”指南用于脚本功能。我还在 phpmyadmin 中测试了查询 (LOAD DATA LOCAL INFILE....) 并且它有效。您确定在 ENCLOSED BY 处应该有一个 '\"'(反斜杠)吗?
  • 谢谢。那么为什么这次我没有收到错误,但在我运行脚本后会出现“帮助功能指南”呢?如果您需要上传它,请告诉我?
  • 尝试移动 --local_infile=1 以在命令之前设置全局,其次,登录(mysql.exe)并运行命令,如果运行并且错误日志没有显示任何内容,请启用常规日志并看看到达 mysql 服务器的命令实际上是什么样子的。你检查所有的基地
【解决方案2】:

感谢@nbk 的帮助

所以我稍微修改了上面的脚本,以下对我有用:(我删除了 mysql 语法中的 db 名称并将其添加到查询中)

mysql -u root -pxxxxxxx -e"LOAD DATA LOCAL INFILE '/mnt/mysqldb/mysqldb-new/mysql/CK-BATCH-FTP/File/XXXX.csv' 
INTO TABLE <DB NAME>.<TABLE NAME>
FIELDS TERMINATED BY ';'
ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;"

【讨论】:

    【解决方案3】:

    如果您使用的是 Mysql8,那么这将对您有所帮助。

    mysql -udbuser -pXXXXX -h host-pc test1 --local_infile=1 -e "LOAD DATA LOCAL INFILE '/home/abc/data.csv' INTO TABLE tempTable FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n' (col1, col2);";
    

    确保用户名和密码中没有空格,即它应该像上面命令中提到的那样。

    还 ENCLOSED BY 只需要以上述格式书写。

    【讨论】:

      猜你喜欢
      • 2018-03-04
      • 1970-01-01
      • 2012-10-05
      • 2012-06-01
      • 2016-07-31
      • 2020-07-25
      • 1970-01-01
      • 2013-01-24
      相关资源
      最近更新 更多