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()## を実行する指定ディレクトリを制限するために使用されます。 # 合格。
NULL で、mysqld のインポートまたはエクスポートが制限されていることを示します。
/tmp の場合、mysqld は /tmp ディレクトリでのみインポートとエクスポートを実行するように制限され、他のディレクトリでは実行できないことを意味します。
値がない場合は、mysqld がどのディレクトリでもインポートおよびエクスポートを制限されていないことを意味します。
の値を確認してください。デフォルトは NULL です。これは、制限をインポートまたはエクスポートできないことを意味します。
mysql> show global variables like '%secure_file_priv%'; +------------------+-------+| Variable_name | Value | +------------------+-------+| secure_file_priv | NULL | +------------------+-------+1 row in set (0.00 sec)
mysql> set global secure_file_priv=''; ERROR 1238 (HY000): Variable 'secure_file_priv' is a read only variable
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)
into outfile
パラメータを使用して、テーブル内のデータを CSV にエクスポートできます。たとえば、次のコマンドを使用して、ユーザー テーブルのデータをユーザーにエクスポートできます。 csvselect * from user into outfile '/tmp/user.csv' fields terminated by ',' optionally enclosed by '"' lines terminated by '\r\n';
php は debug_backtrace メソッドを使用してコード呼び出しを追跡します
mysql はターミナルで SQL を実行し、次のように書き込みます結果ファイルメソッド
#phpはトークンバケットアルゴリズムを使用して、redisに基づいたフロー制御を実装します
以上がmysql secure-file-priv オプションの問題の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。