web-dev-qa-db-ja.com

systemdベースのシステムでmysqlからINTOOUTFILEを保存する場合、出力ファイルはsystemdによって取得されます-なぜですか?

私は定期的にmysql(実際にはmariaDB)データベースから簡単なレポートを実行します。

MariaDB [acts]> SELECT resolution, title FROM acts ORDER BY resolution INTO OUTFILE '/tmp/acts-titles.txt';

最近、systemdバージョン218-2を使用してDBサーバーをLinux 3.19ベースのシステムにアップグレードしましたが、出力ファイルが予想どおり/ tmpディレクトリに直接移動せず、/ tmp内のプライベートsystemdフォルダーに移動することに驚きました。 :

[root@www tmp]# pwd
/tmp/systemd-private-3589befe3ce34ca1a67ed5a83bc77b8b-mysqld.service-ylvzCn/tmp
[root@www tmp]# ls
acts-titles.txt
[root@www tmp]# ls -ld /tmp/systemd-private-3589befe3ce34ca1a67ed5a83bc77b8b-mysqld.service-ylvzCn/
drwx------ 3 root root 60 Mar 23 04:32 /tmp/systemd-private-3589befe3ce34ca1a67ed5a83bc77b8b-mysqld.service-ylvzCn/

これは悲劇的なことではありませんが、rootユーザーのみがこのディレクトリにアクセスできるため、不便です。そのため、mysql管理者はシステムへのrootアクセスも必要になりますが、これは必ずしも必要なことではありません。

Systemdがファイルを取得している理由を誰かが説明できますか?この動作を回避する方法はありますか?

4
pgoetz

/lib/systemd/system/mariadb.serviceでsecuretmpオプションを編集すると、この動作を変更できます。

systemctl stop mariadb

次に、PrivateTmpをfalseに変更しながら、/ lib/systemd/system /mariadb.serviceを編集します。

# Place temp files in a secure directory, not /tmp
PrivateTmp=false  # default is true

そして最後に:

systemctl daemon-reload
systemctl start mariadb

コメントに記載されているように、より良い解決策は、mariadb.serviceファイルに変更を加えるのではなく、別のディレクトリを選択し、mariadbを実行しているユーザーがアクセスして、OUTFILEがそのディレクトリを指すように権限を与えることです。

PrivateTmpオプションが有効になっている場合、これにより、サービスに表示される/ tmpディレクトリがプライベートになり、ホストのシステム/ tmpから分離されます。
あなたが見つけることができる良い視点 ここ

6
taliezin