如何在Ubuntu上修改MySQL的tmpdir路径
在MySQL的临时目录中,通常存储临时表。通常可以更改它的路径来提高mysql服务器的性能。
如何在MySQL服务器中找到默认的tmpdir路径
确定MySQL服务器默认使用哪个TMPDIR路径。
如果没有设置TMPDIR,MySQL将使用系统的默认值,通常是/tmp、/var/tmp或者/usr/tmp。
登录服务器
mysql -u root -p
查看tmpdir变量
SHOW VARIABLES LIKE 'tmpdir';
修改MySQL中的TMPDIR路径
在Ubuntu中,默认情况下,AppArmor将不允许我们更改MySQL的TMPDIR路径,因此我们还必须研究AppArmor服务。
编辑Ubuntu系统上的my.cnf文件
首先备份my.cnf文件。如果出现任何问题,我们可以恢复到原始设置。
sudo cp -pv /etc/mysql/my.cnf /etc/mysql/my.cnf.`date +%F`.bak
我们将使用在/run/shm的自定义路径。即/dev/shm(使用 ls -l /run/shm
可以看到,其实它只是一个符号链接)
在/run/shm中创建目录:
sudo mkdir -p /run/shm/mysql
将所有者和组更改为mysql
sudo chown mysql:mysql /run/shm/mysql id mysql
修改my.cnf文件文件中的TMPDIR值
sudo vi /etc/mysql/my.cnf
如果my.cnf文件中没有tmpdir参数,则新增一行
[mysqld] .. tmpdir = /run/shm/mysql ..
编辑AppArmor
在apparmor中,启用为mysql提供新的tmpdir路径。
在/etc/apparmor.d/usr.sbin.mysqld
文件中设置新的tmpdir路径。
sudo vi /etc/apparmor.d/usr.sbin.mysqld
/run/shm/mysql/ r, /run/shm/mysql/* rw
注意,应添加到大括号中
{ }
如果我们使用/run/shm作为tmpdir的目录,还需要修改rc.local文件。如果是使用磁盘的话,则跳过这1步。
tmpfs是临时的,即不会在硬盘上创建文件。
/run/shm或者/dev/shm是以RAM磁盘形式共享内存。
因此,当系统重新启动时,/run/shm中设置的tmpdir将会消失,从而导致MySQL服务也停止。
为了解决这个问题,我们需要编辑rc.local文件,编写创建目录的命令和更改目录的组所有权的命令。
如下所示:
vi /etc/rc.local mkdir -p /run/shm/mysql chown mysql:mysql /run/shm/mysql
重启apparmor服务
sudo service apparmor restart
现在重启MySQL服务
sudo service mysql restart
验证tmpdir路径
登录mysql server
mysql -u root -p
查看tmpdir变量的值
SHOW VARIABLES LIKE 'tmpdir';
MySQL优化提示:
使用不同的tmpdir路径有助于控制磁盘I/O速率的使用。
我们将观察到mysql性能更好,并且可能在系统中通过mysql进程在CPU和内存使用方面有一些好的变化。
注意:为了有效地分散负载,tmpdir路径应该位于不同的物理磁盘上,而不是位于同一磁盘的不同分区上。
如何在mysql中设置多个TMPDIR
要设置多个tmpdir,我们必须遵循几乎所有相同的过程。
新建tmpdir目录
将新目录的所有者和组改为mysql
允许在apparmor中新建目录,重启apparmor服务。
编辑/etc/mysql/my.cnf文件和设置tmpdir参数:唯一的区别是在my.cnf文件中设置tmpdir。在tmpdir参数中添加新路径时,必须使用“:”(冒号)。
参照下面的例子
tmpdir = /run/shm/mysql:/opt/mysql_tmppath
- 最后重启mysql服务
sudo service mysql restart