【问题标题】:Can not import big CSV to MySQL 5.6 even using --local-infile=1即使使用 --local-infile=1 也无法将大 CSV 导入 MySQL 5.6
【发布时间】:2017-09-11 00:50:52
【问题描述】:

我有一个大小约为 600MB 的 CSV 文件。我想使用 SSH 将它导入 MySQL 5.6,当我阅读时,我可以在 MySQL 5.7 中使用LOAD 命令
因此,我在连接到我的服务器上的 MySQL 时使用了--local-infile=1,如下所示:

mysql -u mydb -p --local-infile=1;

然后,我像这样运行我的代码:

LOAD DATA LOCAL INFILE 'myfile.csv'
INTO TABLE mytable
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\'
(col1,col2,col3);

但是我仍然收到此错误,而我到处阅读我可以使用 --local-infile=1

解决问题
ERROR 1148 (42000): The used command is not allowed with this MySQL version

你知道怎么回事吗?

【问题讨论】:

    标签: mysql csv import load local


    【解决方案1】:

    只有在服务器允许的情况下才有效:

    见:https://dev.mysql.com/doc/refman/5.6/en/load-data.html

    LOCAL 关键字影响文件的预期位置和错误 处理,如后所述。 LOCAL 仅在您的服务器和您的 客户端都已配置为允许它。例如,如果 mysqld 以--local-infile=0 开始,LOCAL 不起作用。见部分 6.1.6,“LOAD DATA LOCAL 的安全问题”。

    【讨论】:

    • 谢谢。我去了 my.cnf 并在那里启用它,然后我可以运行 SQL 命令。
    【解决方案2】:

    将您的 PHP 设置执行时间更改为无限制并使用导入 //处理csv上的分数 $location = $_FILES['fileField']['tmp_name'];

            $file = fopen($location, "r");
    
            while (($csvfile = fgetcsv($file, 10000, ",")) !== FALSE) {
                $firstClm = $csvfile[0];
                $secondClm = $csvfile[1];
                $thirdClm = $csvfile[2];
                //Insert to database
            }
    

    【讨论】:

    • 我想使用上面提到的 SSH 来完成它。这样,操作将比使用 PHP 快得多。
    猜你喜欢
    • 2011-05-28
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多