我们的Mysql查询使用临时表,在进程中创建临时文件。目前文件被写入/ tmp。 mysql写入的临时文件夹的路径究竟如何改变?
答案 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.html,https://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