前言

实验室的机子 MySQL 的空间不够了,需要换一下数据目录,替它再续五百年(笑

当然这么简单的事情是一定要踩坑的,不踩坑怎么能表现研究的难度呢?

Step 1 查看数据目录在哪

通过执行相应 MySQL 查询操作我们发现,相应的数据目录位于 /var/lib/mysql(其实一般 centos 的都在)

## login
mysql -u root -p
## exec sql
mysql> select @@datadir;
## output
+----------------------------+
| @@datadir                  |
+----------------------------+
| /var/lib/mysql/ |
+----------------------------+
1 row in set (0.01 sec)

Step 2 关闭 MySQL 服务

这个就比较简单了,我们需要关闭一下我们的 MySQL 服务

sudo systemctl stop mysqld

关闭完成之后可以尝试输入:

sudo systemctl status mysqld

可以看到输出如下:

Mar 15 20:01:50 R920 systemd[1]: Stopping MySQL Server...
Mar 15 20:01:54 R920 systemd[1]: Stopped MySQL Server.

Step 3 移动目录

在这里,我们需要先新建一个文件夹作为我们之后的 MySQL 所存放的路径,那么需要的是新建这样一个文件夹

比如我们在 home 下新建 data 目录

mkdir /home/data

然后拷贝相应数据

sudo rsync -av /var/lib/mysql /home/data/

这里使用 rsync -av 的作用是,详细模式并以递归方式传输文件,并保持所有文件属性

然后以防万一还是修改一下 mysql 文件夹的所有者,全部改为 mysql

sudo chown -R mysql /home/data/mysql
sudo chgrp -R mysql /home/data/mysql

上面的 -R 参数指的是以递归模式,即即所有的子文件夹均会更改所有者

然后非常 关键 的一步,修改 SELinux 属性,要知道 CentOS 是默认开启 SELinux 的,那么也就是说,需要修改 SELinux 的相应属性值才能正常工作:

sudo chcon -R -t mysqld_db_t  /home/data/mysql

多少教程就是缺了这么一步导致无法运行😰

Step 4 修改配置文件

修改数据目录的关键在于修改配置文件 /etc/my.cnf

sudo vim /etc/my.cnf

然后做如下修改:

[mysqld]
. . .
# datadir=/var/lib/mysql
datadir=/home/data/mysql
# socket=/var/lib/mysql/mysql.sock
socket=/home/data/mysql/mysql.sock
. . .

注释掉之前的语句并添加新增的目录

然后为了客户端的访问,需要在最后加上:

[client]
port=3306
socket=/home/data/mysql/mysql.sock

Step 5 重新启动

重启 MySQL 服务:

sudo systemctl start mysqld

再次尝试 sudo systemctl status mysqld 命令,看到输出如下:

Mar 15 20:04:22 R920 systemd[1]: Starting MySQL Server...
Mar 15 20:04:25 R920 systemd[1]: Started MySQL Server.

结束,走人!

当然你可以继续使用 MySQL 提供的 Client 来判断是否修改成功:

## login
mysql -u root -p
## exec sql
mysql> select @@datadir;
## output
+----------------------------+
| @@datadir                  |
+----------------------------+
| /home/data/mysql/          |
+----------------------------+
1 row in set (0.01 sec)

参考资料