MySQL into outfile secure-file-priv

1713 ワード

MySQLはinto outfileを使用してファイルの直接出力を行うことができますが、データベースのデフォルトではこのサービスは開いていません.select*from XXX into outfile'xxxを直接実行します.xlsx’;,次のエラーが表示されます.
[HY000][1290] The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
show global variables like ‘%secure_file_priv%’; secure_file_privパラメータLOAD DATA,SELECT…OUTFILE,LOAD_FILE()はどの指定ディレクトリに転送しますか.
secure_file_privがNULLの場合、mysqldのインポートまたはエクスポートは制限されていません.secure_file_privが/tmpの場合、制限mysqldは/tmpディレクトリでのみインポートエクスポートを実行でき、他のディレクトリでは実行できないことを示します.secure_file_privに値がない場合は、mysqldの任意のディレクトリでのインポートエクスポートを制限しないことを示します.なぜならfile_privパラメータは読み取り専用パラメータでset globalコマンドでは変更できません
解決策
開けてcnfかmy.ini、次の文を追加してmysqlを再起動します.
secure_file_priv=''
service mysql restart

次に進みます.
select a.    ,a.   NBR from `       (0103)` a into outfile '/data/mysql/20200610Data.xlsx';

逆転成功.注:バックするパスは必ず存在し、現在のMySQLにインストールされている環境のパス、例えばlinuxの場合、パスはlinuxの場合、そうでないとパスが見つからないエラーが報告されます.バックアウトに成功すると、このパスの下にバックアウトファイルが表示されます.[root@VM_0_11_centos mysql]# ll total 1173996 -rw-rw-rw- 1 mysql mysql 1577 Jun 10 11:41 20200610Data.xlsx
MySQL into outfileで成功しました.
しかし、カラム名はないが、sql文を修正する方法でヘッダを付けることができ、具体的な実現方法は、データを検索する際にカラム名を付けることである:select*from (0103) a into outfile'/data/mysql/20200610 Data.xlsx’fields terminated by't’OPTIONALLY ENCLOSED BY''''lines terminated by'''from(select'権益名称','販売品NBR'union select権益名称,販売品NBR from table)b;
また、MySQLはファイルload data infile xxx into Table‘zxzcd’の直接インポートをサポートしています.SQLによるファイルデータのインポートはお勧めしません.なぜなら、うっかりすると穴が開いてしまうからです.