Mysqlクエリは、プロセス内で一時ファイルを作成する一時テーブルを使用します。現在、ファイルは/ tmpに書き込まれています。 mysqlが書き込む一時フォルダーのパスをどのくらい正確に変更できますか?
My.cnfを編集する必要があります
tmpdir = /whatewer/you/want
そしてその後、mysqlを再起動します
追伸mysqlユーザーに/whatewer/you/want
に書き込み権限を付与することを忘れないでください
次に、mysqld tmpdirを/ 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