トップへ(mam-mam.net/)

MySQL/MariaDBでINTO OUTFILEで/tmpにファイル出力で ERROR 1086 (HY000): File already exists エラー

検索:

「MySQL/MariaDBでINTO OUTFILEで/tmpにファイル出力で ERROR 1086 (HY000): File already exists エラー」

LinuxのMySQL/MariaDBで以下のようなSQLで/tmpディレクトリにファイルを出力するとエラーになります。
SELECT * FROM t_test INTO OUTFILE "/tmp/a.csv" FIELDS TERMINATED '\t' ENCLOSED BY '"' LINES TEMINATED BY '\r\n'

ERROR 1086 (HY000): File '/tmp/a.csv' already exists

/tmpディレクトリに
a.csv
ファイルが無いのに、ファイルがあると言われています。

回答

systemdがプライベートテンポラリディレクトリを作成して本来とは違う場所
/tmp/systemd-private-XXXX-mariadb.service-XXXX/tmp/a.csv
又は
/tmp/systemd-private-XXXX-mysqld.service-XXXX/tmp/a.csv
にファイルを保存している可能性が高いです。(XXXXはランダムな英数文字列)

ソース

systemdの設定を確認する必要があります。
以下でファイルを開き、
vi /usr/lib/systemd/system/mariadb.service
又は
vi /usr/lib/systemd/system/mysqld.service


#プライベートテンポラリディレクトリを作成する
PrivateTmp=true

#プライベートテンポラリディレクトリを作成しない
PrivateTmp=false
に設定を変更します。

systemctl restart mysqld.service
でサービスを再起動し、設定を反映させると直ります。