web-dev-qa-db-ja.com

選択をcsvに保存するときのエラー「--secure-file-privオプション」

Win 2012 R2サーバーで非常に大きな選択(70ミリオンを超える行をcsvファイルに保存)を保存しようとしています

Rootとしてクエリを実行しましたが、権限にまだ問題があると思います

select * 
INTO OUTFILE 'D:\my_folder\my_file.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
from my_table
where 
...

エラー

エラーコード:1290。MySQLサーバーは--secure-file-privオプションで実行されているため、このステートメントを実行できません

何か助けてくれてありがとう!

4
Toren

Win2012で、my.iniファイルを見つけました。

ファイルには、secure_file_priv-からのダウンロードまたはアップロードが可能なフォルダーの定義があります。

したがって、次のようにクエリを変更します。

 SELECT * 
 INTO OUTFILE 'D:\<folder_defined_as_secure_file_priv>\my_file.csv'
 FIELDS TERMINATED BY ','
 ENCLOSED BY '"'
 LINES TERMINATED BY '\n'
 FROM my_table
 WHERE 
 ...
1
Toren

Windows 10でMySQL Server 8.0を使用しています。次のコマンドを使用してcsvファイルからデータをロードしようとしました。

LOAD DATA INFILE 'C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\World_cup_dataset.csv'
INTO TABLE trial
FIELDS TERMINATED BY ',';

上記のコマンドを実行すると、

「エラー1290(HY000):MySQLサーバーは--secure-file-privオプションで実行されているため、このステートメントを実行できません」

私は問題を解決するために多くの方法を試しました。最後に、ファイルパスの「\」文字を「/」文字に変更しました。

つまり、新しいファイルパスがC:/ProgramData/MySQL/MySQL Server 8.0/Uploads/World_cup_dataset.csvになり、問題が修正されました。 MySQLサーバーフォルダーにあるmy.iniファイルを見ると、secure-file-privのパスは "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads"です。したがって、このソリューションは理にかなっています。

1
Mehmet
SHOW VARIABLES LIKE "secure_file_priv";

secure_file_priv    C:\ProgramData\MySQL\MySQL Server 5.7\Uploads\

SELECT  *  INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/algo.csv'  
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'   LINES TERMINATED BY '\n'   FROM sams.trafico;
0
user150497

私もこれらの問題を抱えており、インターネットで見つけたさまざまな答えを使用して、いくつかの実験を行いました。これは、Windows 10 63ビットPC上のローカルWAMP(3.1.7)サーバーで動作するようになりました。これをPHP内で行い、root管理者としてログオンしました。

まず、単に--secure-file-privを入力することによる問題secure-file-priv = ""[mysqld]見出しmy.ini

次に、SQLクエリを作成して実行しました。

$sql = "SELECT * FROM inloggning INTO OUTFILE 'C:/Temp/sample.csv' CHARACTER SET 'Latin1' FIELDS ENCLOSED BY '\"' TERMINATED BY '\;' ESCAPED BY '\"' LINES TERMINATED BY '\r\n'";

$result =   mysqli_query($databas_link, $sql) 
            or die('File output failed!(sql) - MySQL error: ('.mysqli_errno($databas_link).') '.mysqli_error($databas_link).' ');

これは完璧に機能します。現在、同じ変更と構文を使用して、ファイルをWebホテルサーバーに保存する方法に取り組んでいます。

0
Errol Jacoby