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 にエクスポートされます。
パラメータの説明:
into outfile 'エクスポートされたディレクトリとファイル名'
エクスポートされたディレクトリとファイル名を指定します
フィールドは 'フィールド区切り文字' で終了します
フィールド間の区切り文字を定義します
オプションで ' で囲まれますフィールドラッパー
フィールドを囲む文字を定義します(数値フィールドは無効です)
「行間区切り文字」で終了する行
各行の区切り文字を定義します
問題分析
上記のコマンドは問題ありません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)
変更後、再度実行し、エクスポートに成功します。
';
実行後、ユーザーテーブルのデータが/tmp/user.csvにエクスポートされます。
パラメータの説明:
into outfile 'エクスポートされたディレクトリとファイル名'
エクスポートされたディレクトリとファイル名を指定します
フィールドは'フィールド区切り文字'で終了します
フィールド間の区切り文字を定義します
オプションで'で囲まれますフィールドラッパー'
フィールドを囲む文字を定義します(数値フィールドは無効です)
「行間区切り文字」で終了する行
各行の区切り文字を定義します
問題分析
上記のコマンドは問題ありません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)
変更後、再度実行し、エクスポートに成功します。
りー以上がMysql5.7 エクスポート データ プロンプト --secure-file-priv オプションの問題の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。