如何在Ubuntu上修改MySQL的tmpdir路径

在MySQL的临时目录中,通常存储临时表。通常可以更改它的路径来提高mysql服务器的性能。

如何在mysql中设置多个TMPDIR

要设置多个tmpdir,我们必须遵循几乎所有相同的过程。

  1. 新建tmpdir目录

  2. 将新目录的所有者和组改为mysql

  3. 允许在apparmor中新建目录,重启apparmor服务。

  4. 编辑/etc/mysql/my.cnf文件和设置tmpdir参数:唯一的区别是在my.cnf文件中设置tmpdir。在tmpdir参数中添加新路径时,必须使用“:”(冒号)。

参照下面的例子

tmpdir		= /run/shm/mysql:/opt/mysql_tmppath
  1. 最后重启mysql服务
sudo service mysql restart

如何在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路径应该位于不同的物理磁盘上,而不是位于同一磁盘的不同分区上。

日期:2019-08-20 17:58:07 来源:oir作者:oir