更改mysql的tmp文件夹

时间:2012-08-16 15:44:47

标签: mysql tmp

我们的Mysql查询使用临时表,在进程中创建临时文件。目前文件被写入/ tmp。 mysql写入的临时文件夹的路径究竟如何改变?

7 个答案:

答案 0 :(得分:44)

您应该编辑my.cnf

tmpdir = /whatewer/you/want

之后重新启动mysql

P.S。不要忘记为mysql用户提供/whatewer/you/want的写权限

答案 1 :(得分:35)

这是一个将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.htmlhttps://blogs.oracle.com/jsmyth/entry/apparmor_and_mysql

答案 2 :(得分:5)

这在文档中得到了解答:

Where MySQL Stores Temporary Files

  

在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。

答案 3 :(得分: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

答案 4 :(得分: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 -R 1777 /某处

重新启动

 sudo /etc/init.d/apparmor reload

 sudo /etc/init.d/mysql restart

答案 5 :(得分:0)

您还可以设置TMPDIR环境变量。

在某些情况下(对于我来说是Docker),设置环境变量比更新配置文件更方便。

答案 6 :(得分:0)

在 centos 8 上适用于 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