MySQL 数据存储目录迁移
原文地址 : CentOS 7 更改 MySQL 数据目录
这里首先需要把服务器挂载云盘, 然后对停服, 移库, 重启, 启动服务器
挂载云盘
阿里云 : 挂载云盘
云盘写入 fstab 之后需要测试下是否能够正常挂载, 使用命令 mount -a
阿里云 : 格式化数据盘
服务器启停
这里由于使用的是 Laravel 框架, 需要使用 Laravel 的命令对服务器进行友好一些的启动和停止
$ php artisan down
$ php artisan upMysql 的Data 数据迁移
数据库文件随着使用会逐渐变大,有时根据需求,需要更改数据库的默认数据目录。 环境说明 CentOS 7(Minimal Install)
$ cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)CentOS 7 安装 MySQL,请参考 CentOS 7 安装 nginx,php, mysql, redis,supervisor 套件
本例演示如下
| MySQL | Directory | 描述 |
| 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.bakQA
优化数据库数据
mysql> optimize table game_log
mysql> optimize table finance_lock执行mysql登陆失败
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)解决方案
参考 MySQL 数据存储目录迁移 链接, 设置服务端和客户端的链接方式来解决客户端和服务端链接的问题
[mysqld]
socket=/storage/mysql/mysql.sock结论
本文演示了 MySQL 更改数据目录,MySQL 还有其他方式更改目录。可以参考:
