原文地址 : CentOS 7 更改 MySQL 数据目录

这里首先需要把服务器挂载云盘, 然后对停服, 移库, 重启, 启动服务器

挂载云盘

阿里云 : 挂载云盘
云盘写入 fstab 之后需要测试下是否能够正常挂载, 使用命令 mount -a
阿里云 : 格式化数据盘

服务器启停

这里由于使用的是 Laravel 框架, 需要使用 Laravel 的命令对服务器进行友好一些的启动和停止

  1. $ php artisan down
  2. $ php artisan up

Mysql 的Data 数据迁移

数据库文件随着使用会逐渐变大,有时根据需求,需要更改数据库的默认数据目录。
环境说明
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 /storage/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 /storage/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=/storage/mysql
socket=/storage/mysql/mysql.sock
. . .

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

[client]
port=3306
socket=/storage/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> optimize table game_log
mysql> optimize table finance_lock

结论

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