Mysqlクエリは、プロセスで一時ファイルを作成する一時テーブルを使用します。現在、ファイルは/tmpに書き込まれています。mysqlが書き込む一時フォルダのパスをどの程度正確に変更できますか?
7 に答える
my.cnfを編集する必要があります
tmpdir = /whatewer/you/want
その後、mysqlを再起動します
/whatewer/you/want
PSmysqlユーザーに書き込み権限を与えることを忘れないでください
mysqldtmpdirを/tmpから/run/ mysqldに移動する例を次に示します。これは、Ubuntu 13.04にすでに存在し、tmpfs(memory / ram)です。
sudo vim /etc/mysql/conf.d/local.cnf
追加:
[mysqld]
tmpdir = /run/mysqld
それで:
sudo service mysql restart
確認:
SHOW VARIABLES LIKE 'tmpdir';
================================================== ================
MySQLの再起動時にエラーが発生した場合は、AppArmorが有効になっている可能性があります。
sudo vim /etc/apparmor.d/local/usr.sbin.mysqld
追加:
# Site-specific additions and overrides for usr.sbin.mysqld.
# For more details, please see /etc/apparmor.d/local/README.
/run/mysqld/ r,
/run/mysqld/** rwk,
それで:
sudo service apparmor reload
ソース: http: //2bits.com/articles/reduce-your-servers-resource-usage-moving-mysql-temporary-directory-ram-disk.html、https : //blogs.oracle.com/jsmyth/entry/ apparmor_and_mysql
これはドキュメントで回答されています:
Unixでは、MySQLはTMPDIR環境変数の値を一時ファイルを保存するディレクトリのパス名として使用します。TMPDIRが設定されていない場合、MySQLはシステムのデフォルト(通常は/ tmp、/ var / tmp、または/ usr / tmp)を使用します。
Windows、Netware、およびOS2では、MySQLはTMPDIR、TEMP、およびTMP環境変数の値を順番にチェックします。最初に設定されたものについては、MySQLはそれを使用し、残っているものをチェックしません。TMPDIR、TEMP、またはTMPのいずれも設定されていない場合、MySQLはWindowsシステムのデフォルト(通常はC:\ windows \ temp)を使用します。
apparmorまたはselinuxの問題はないが、それでもエラーコード13が発生する場合:
mysqlはフルパスにアクセスできる必要があります。つまり、ポイントする意図したフォルダだけでなく、すべてのフォルダがmysqlにアクセス可能である必要があります。
たとえば、mysql構成でこれを使用してみます。tmp = /some/folder/on/disk
# will work, as user root:
mkdir -p /some/folder/on/disk
chown -R mysql:mysql /some
# will not work, also as user root:
mkdir -p /some/folder/on/disk
chown -R mysql:mysql /some/folder/on/disk
これは、AppArmorを使用したMySqlに役立つ可能性があります
mysqlを停止します:
sudo /etc/init.d/mysql stop
/ somewhere/tmpというディレクトリを作成します
構成の編集:
sudo vim /etc/mysql/my.cnf
# 多分sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
変化する
tmpdir = / somewhere / tmp /
それで
sudo vim /etc/apparmor.d/usr.sbin.mysqld
追加
# Allow data dir access
/somewhere/ r,
/somewhere/** rwk,
sudo chown -R root:root / somewhere
sudo chmod -R1777/どこか
再起動
sudo /etc/init.d/apparmor reload
sudo /etc/init.d/mysql restart
TMPDIR
環境変数を設定することもできます。
状況によっては(私の場合はDocker)、構成ファイルを更新するよりも環境変数を設定する方が便利です。
CentOS8で5.7で動作します
mkdir /tmp/1 /tmp/1
semanage fcontext -a -t mysqld_db_t "/tmp/1(/.*)?"
restorecon -Rv /tmp/1
semanage fcontext -a -t mysqld_db_t "/tmp/2(/.*)?"
restorecon -Rv /tmp/2
to my.cnf tmpdir=/tmp/1:/tmp/2
sudo service mysql restart