更改mysql的tmp文件夹
我们的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更改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使用
你应该编辑你的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