ホームページ >バックエンド開発 >PHPチュートリアル >mysql secure-file-priv オプションの問題の解決策

mysql secure-file-priv オプションの問題の解決策

jacklove
jackloveオリジナル
2018-06-15 17:34:108846ブラウズ

mysql は、into outfile パラメータを使用して、テーブル内のデータを csv にエクスポートできます。たとえば、次のコマンドを使用して、ユーザー テーブルのデータを user.csv

にエクスポートできます。
select * from user into outfile '/tmp/user.csv' fields terminated by ',' optionally enclosed by '"' lines terminated by '\r\n';

実行後、ユーザー テーブルのデータが /tmp/user.csv にエクスポートされます。

パラメータの説明:

into outfile 'エクスポートされたディレクトリとファイル名'
エクスポートされたディレクトリとファイル名を指定します

フィールド「フィールド区切り文字」で終了
フィールド間の区切り文字を定義します

オプションで「フィールドラッパー」で囲みます
フィールドを囲む文字を定義します(数値フィールドは無効です) )

lines terminated by 'interline delimiter'
Define the delimiter for each line

問題分析

上記 コマンドは次の環境で問題なく実行されます。 mysql5.6 ですが、mysql5.7 で実行すると次のエラーが発生します。

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


公式ドキュメントを参照してください。secure_file_priv パラメータは、LOAD DATA、SELECT...OUTFILE、LOAD_FILE()## を実行する指定ディレクトリを制限するために使用されます。 # 合格。

  • secure_file_priv は

    NULL で、mysqld のインポートまたはエクスポートが制限されていることを示します。

  • secure_file_priv

    /tmp の場合、mysqld は /tmp ディレクトリでのみインポートとエクスポートを実行するように制限され、他のディレクトリでは実行できないことを意味します。

  • secure_file_priv

    値がない場合は、mysqld がどのディレクトリでもインポートおよびエクスポートを制限されていないことを意味します。

secure_file_priv

の値を確認してください。デフォルトは NULL です。これは、制限をインポートまたはエクスポートできないことを意味します。

mysql> show global variables like '%secure_file_priv%';
+------------------+-------+| Variable_name    | Value |
+------------------+-------+| secure_file_priv | NULL  |
+------------------+-------+1 row in set (0.00 sec)
secure_file_priv

パラメータは読み取り専用パラメータであり、set global コマンドを使用して変更できないためです。

mysql> set global secure_file_priv='';
ERROR 1238 (HY000): Variable 'secure_file_priv' is a read only variable
Solution

my.cnf または my.ini

を開き、次のステートメントを追加して、mysql を再起動します。

secure_file_priv=''
secure_file_priv の変更後の値を確認します
mysql> show global variables like '%secure_file_priv%';
+------------------+-------+| Variable_name    | Value |
+------------------+-------+| secure_file_priv |       |
+------------------+-------+1 row in set (0.00 sec)

変更後、再度実行するとエクスポートに成功します。

mysql> select * from user into outfile '/tmp/user.csv' fields terminated by ',' optionally enclosed by '"' lines terminated by '\r\n';
Query OK, 15 rows affected (0.00 sec)

mysql は、

into outfile

パラメータを使用して、テーブル内のデータを CSV にエクスポートできます。たとえば、次のコマンドを使用して、ユーザー テーブルのデータをユーザーにエクスポートできます。 csv

select * from user into outfile '/tmp/user.csv' fields terminated by ',' optionally enclosed by '"' lines terminated by '\r\n';
実行後、ユーザーテーブルのデータが/tmp/user.csvにエクスポートされます。

この記事では、mysql5.7 のエクスポート データ プロンプト --secure-file-priv オプションの問題の解決策について説明します。関連コンテンツの詳細については、PHP の中国語 Web サイトを参照してください。

関連する推奨事項:

php は debug_backtrace メソッドを使用してコード呼び出しを追跡します


mysql はターミナルで SQL を実行し、次のように書き込みます結果ファイルメソッド


#phpはトークンバケットアルゴリズムを使用して、redisに基づいたフロー制御を実装します

#

以上がmysql secure-file-priv オプションの問題の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。