CentOS 7 更改 MySQL 数据目录

前言

数据库文件随着使用会逐渐变大,有时根据需求,需要更改数据库的默认数据目录。

环境说明

CentOS 7(Minimal Install)

$ cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 
  1. CentOS 7 安装 MySQL,请参考 CentOS 7 下 Yum 安装 MySQL 5.7

本例演示如下

MySQL Directory Descprition
old /var/lib/mysql 旧的目录
new /data/mysql 新的目录

步骤

步骤 1:移动数据文件

准备移动数据文件之前,需要做一些准备工作,先检查一下当前文件目录的位置。

登录 MySQL

$ mysql -u root -p

输入 root 的密码,登录 MySQL。之后出现 mysql 的提示符,然后进行查看。

mysql> select @@datadir;
+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)

这表示 MySQL 现在使用的是默认的目录 /var/lib/mysql

我们需要退出 MySQL

mysql> exit

为了确保移动数据的完整性,我们需要再判断一下服务是否停止。

$ sudo systemctl stop mysqld

之后查看一下状态

$ sudo systemctl status mysqld
. . .
May 10 10:14:10 localhost.localdomain systemd[1]: Stopped MySQL Community Server.

可以看到服务都停止了,我们需要使用 rsync 命令,拷贝数据目录到新的地方,使用 -a 参数保留权限和其他目录的属性,使用 -v 参数跟踪拷贝进度。

注意

确保最后没有斜杠,有时使用 tab 容易带出斜杠

$ sudo mkdir /data
$ sudo rsync -av /var/lib/mysql /data/mysql

拷贝完成之后,我们将默认目录名进行更改,以防出错可以再次使用,成功之后再删除。

$ sudo mv /var/lib/mysql /var/lib/mysql.bak

这样文件移动完成,接下来开始更改配置

步骤 2:配置

MySQL 默认的目录配置在 /etc/my.cnf

$ sudo vi /etc/my.cnf

我们需要更改 [mysqld] 块,更改 datadir 参数和 socket 参数。

[mysqld]
. . .
datadir=/data/mysql
socket=/data/mysql/mysql.sock
. . .

我们还需要更改 [client] 块的内容,默认是没有 [client] 块的配置的,需要添加上。

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

这样设置就完成了,:wq 保存并退出,

步骤 3:重启 MySQL 服务

现在我们更改了数据目录的配置,让我们来验证一下。

$ sudo systemctl start mysqld
$ sudo systemctl status mysqld

服务启动没有问题之后,我们登录到 MySQL中

$ mysql -u root -p

输入 root 的密码之后,我们输入如下语句查看:

mysql> select @@datadir;
+----------------------------+
| @@datadir                  |
+----------------------------+
| /data/mysql/               |
+----------------------------+
1 row in set (0.01 sec)

请查看一下数据库,确认一下没有问题之后,可以删除以前的备份。

注意

如果怕有问题,而且又有空间,可以不删除。

$ sudo rm -Rf /var/lib/mysql.bak

结论

本文演示了 MySQL 更改数据目录,MySQL 还有其他方式更改目录。

可以参考:

参考资料

How to Change a MySQL Data Directory to a New Location on CentOS 7

分类: Linux | 评论

blog comments powered by Disqus