37

Mysqlクエリは、プロセスで一時ファイルを作成する一時テーブルを使用します。現在、ファイルは/tmpに書き込まれています。mysqlが書き込む一時フォルダのパスをどの程度正確に変更できますか?

4

7 に答える 7

62

my.cnfを編集する必要があります

tmpdir = /whatewer/you/want

その後、mysqlを再起動します

/whatewer/you/wantPSmysqlユーザーに書き込み権限を与えることを忘れないでください

于 2012-08-16T16:15:46.493 に答える
44

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

于 2014-05-02T19:48:00.197 に答える
5

これはドキュメントで回答されています:

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)を使用します。

于 2012-08-16T15:46:39.163 に答える
3

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
于 2018-08-20T15:20:01.930 に答える
1

これは、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
于 2020-07-16T23:14:43.220 に答える
0

TMPDIR環境変数を設定することもできます。

状況によっては(私の場合はDocker)、構成ファイルを更新するよりも環境変数を設定する方が便利です。

于 2020-09-13T19:03:04.057 に答える
0

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
于 2021-07-22T16:14:57.357 に答える