前言
实验室的机子 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)