web-dev-qa-db-ja.com

MySQLがINTO OUTFILEをエクスポートする--set directoryを使用すると、secure-file-privエラーが発生する

MySQLデータベースで以下を実行しようとしています。

SELECT * FROM mysql.db
INTO OUTFILE "C:\ProgramData\MySQL\MySQL Server 5.7\Uploads\db.csv"
FIELDS TERMINATED BY '|'
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

エラーが発生します:

SQL Error (1290): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

次を実行すると:

mysql> SELECT @@secure_file_priv;

私は得ます:

+------------------------------------------------+
| @@secure_file_priv                             |
+------------------------------------------------+
| C:\ProgramData\MySQL\MySQL Server 5.7\Uploads\ |
+------------------------------------------------+

では、set --secure-file-privの場所を使用しているにもかかわらず、なぜファイルをエクスポートしないのですか?

私はMSSQLに慣れており、MySQLは初めてです。

9
Lateralus

ああ。それは奇抜なタイプミスでした、私の\は/だったはずです

だから私のクエリは今これです:

SELECT * FROM   mysql.db INTO OUTFILE "C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/db_pipe.csv" FIELDS TERMINATED BY '|' ENCLOSED BY '"'  LINES TERMINATED BY '\n';
9
Lateralus

以下に記載されているパスの場所を使用することが重要です。

mysql> SELECT @@secure_file_priv;

カスタマイズされたパスの場所を使用する場合でも、このエラーが発生します。 Lateralusが述べたように、パスをスラッシュに変更することを忘れないでください。

15
Sayali Sonawane

これでうまくいきました。二重のバックスラッシュが必要であり、mysqlに接続するためにその間にツールを使用する場合は、エスケープ文字を追加するだけです。

SELECT * 
      INTO OUTFILE 'C:\\\\ProgramData\\\\MySQL\\\\MySQL Server 8.0\\\\Uploads\\\\employees.txt'
        FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
        LINES TERMINATED BY '\n'
      FROM employees;
0
PRITISH

私の場合(Windows):

  1. My.iniで、secure_file_priv=""

  2. 以下のように、パスにダブルバックスラッシュを使用します。

SELECT description, comment FROM usecase
INTO OUTFILE 'C:\\tmp\\usecase0.csv' 
FIELDS ENCLOSED BY '"' 
TERMINATED BY ';' 
ESCAPED BY '"' 
LINES TERMINATED BY '\r\n';
0
mdivk