【问题标题】:Linux bash MySQL load infileLinux bash MySQL 加载文件
【发布时间】:2013-12-23 00:53:38
【问题描述】:

我正在尝试简化加载数据本地 infile,方法是将其放入 .sh 文件中,然后使用 bash 运行它。

这是我的 count_portal.sh 文件

mysql -h host -u root -p password 
load data local infile
"/workplace/user/dump/count_portal.txt" 
replace into table test.icqa_count_portal 
fields terminated by '\t' lines terminated by '\n' ignore 1 lines;

这是我的 bash 脚本

bash /home/user/Desktop/count_portal.sh 我得到的输出没有达到它的设计目的。当我简单地让 count_portal.sh 包含 mysql -h host 时,它在运行脚本时很长。

【问题讨论】:

  • 那么问题是什么?
  • 我将如何让这个 .sh 工作。目前它在 mysql -h host -u root -p 密码之后没有读取任何内容。似乎加载数据本地 infile 无法识别或无法正常工作。虽然它在连接到 mysql 时确实可以独立工作。

标签: mysql linux bash terminal


【解决方案1】:
mysql -u<username> -p<password> -h<hostname> <db_name> --local_infile=1 -e "use <db_name>" -e"LOAD DATA LOCAL INFILE '<path/file_name>' 
IGNORE INTO TABLE <table_name>
FIELDS TERMINATED BY '\t'
OPTIONALLY ENCLOSED BY '\"'"

【讨论】:

    【解决方案2】:

    我想通了。这是我的文件。

    #!/bin/bash
    /usr/bin/mysql --host=host --user=root --password=password --database=test<<EOFMYSQL
    load data local infile '/workplace/user/ETLdump/count_portal.txt' replace INTO TABLE count_portal fields terminated by '\t' LINES
    TERMINATED BY '\n' ignore 1 lines;
    EOFMYSQL
    

    完美运行!

    【讨论】:

      【解决方案3】:

      我同意@PasteBT,他的回答应该很好。我认为存在逃逸问题或 shell 变量为空。

      你试过了吗?:

      echo "LOAD DATA LOCAL INFILE '/workplace/user/dump/count_portal.txt' REPLACE INTO TABLE test.icqa_count_portal FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' IGNORE 1 LINES;" | mysql -h host -u root -ppassword
      

      你原来的shell脚本是错误的。你能再发一下你做了什么吗?

      【讨论】:

        【解决方案4】:

        错过了-e?

        mysql -h host -u root -ppassword dbname -e "load data local infile '/workplace/user/dump/count_portal.txt' replace into table test.icqa_count_portal fields terminated by '\t' lines terminated by '\n' ignore 1 lines;"
        

        【讨论】:

        • 尝试了同样的结果,只是给了我一堆示例命令选项。
        • @Spartacus38 Emm,还有两件事,-p 和密码之间不应该有空格,你错过了数据库名称。
        • 确实如此,它生成了一个新行。引用 >
        【解决方案5】:

        尝试删除用户和密码开关之间的空格。所以它会是这样的:

        mysql -h host -uroot -ppassword etc....
        

        在 bash 脚本中执行类似操作时,这些空格似乎会给我带来问题。

        【讨论】:

          猜你喜欢
          • 2014-04-03
          • 2013-02-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-01
          • 2013-06-23
          • 2011-06-11
          相关资源
          最近更新 更多