更改mysql的tmp文件夹

更改mysql的tmp文件夹,mysql,tmp,Mysql,Tmp,我们的Mysql查询使用临时表,在这个过程中创建临时文件。当前,这些文件被写入/tmp。mysql写入的临时文件夹的路径究竟如何更改?文档中对此进行了回答: 在Unix上,MySQL使用TMPDIR环境变量的值作为 要在其中存储临时文件的目录的路径名。如果 TMPDIR未设置,MySQL使用系统默认值,通常为 /tmp、/var/tmp或/usr/tmp 在Windows、Netware和OS2上,MySQL按顺序检查 TMPDIR、TEMP和TMP环境变量。第一次发现 要设置,MySQL使用

我们的Mysql查询使用临时表,在这个过程中创建临时文件。当前,这些文件被写入/tmp。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


你应该编辑你的my.cnf

tmpdir = /whatewer/you/want
然后重启mysql


注意:别忘了为mysql用户授予
/whatewer/you/want
写权限,这里有一个示例,可以将mysqld tmpdir从/tmp移动到/run/mysqld,它已经存在于Ubuntu 13.04上,是一个tmpfs(内存/ram):

加:

然后:

核实:

SHOW VARIABLES LIKE 'tmpdir';
==================================================================

如果重新启动MySQL时出错,则可能已启用AppArmor:

sudo vim /etc/apparmor.d/local/usr.sbin.mysqld
加:

然后:

sudo service apparmor reload 

来源:,

如果您没有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根:根/某处

sudo chmod-R 1777/某处

重新启动

 sudo /etc/init.d/apparmor reload

 sudo /etc/init.d/mysql restart

您还可以设置
TMPDIR
环境变量


在某些情况下(我的例子是Docker),设置环境变量比更新配置文件更方便。

其他答案更好,因为它们解释了如何在MySQL配置文件中设置
tmpdir
,而不是依赖环境变量。
sudo /etc/init.d/mysql stop
sudo vim /etc/apparmor.d/usr.sbin.mysqld
# Allow data dir access
  /somewhere/ r,
  /somewhere/** rwk,
 sudo /etc/init.d/apparmor reload

 sudo /etc/init.d/mysql restart