数据库随着时间的推移而增长,有时会超出文件系统上的空间。当它们与操作系统的其余部分位于同一分区时,您也可能会遇到 I/O 争用。 RAID、网络块存储和其他设备可以提供冗余和其他所需的功能。无论您是要添加更多空间、评估优化性能的方法,还是希望利用其他存储功能,本教程都将指导您重新定位 MySQL 的数据目录。
要完成本指南,您将需要:
-
具有非 root 用户的 CentOS 7 服务器
sudo
权限和MySQL安装。您可以在我们的文章中详细了解如何设置具有这些权限的用户CentOS 7 的初始服务器设置指导。如果您还没有安装 MySQL,如何在 CentOS 7 上安装 MySQL指南可以帮助你。
在此示例中,我们将数据移动到安装在以下位置的块存储设备:/mnt/volume-nyc1-01
。您可以了解如何在如何在 DigitalOcean 上使用块存储 guide.
无论您使用什么底层存储,本指南都可以帮助您将数据目录移动到新位置。
为了准备移动 MySQL 的数据目录,让我们通过使用管理凭据启动交互式 MySQL 会话来验证当前位置。
出现提示时,提供 MySQL root 密码。然后从 MySQL 提示符中选择数据目录:
Output
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)
此输出确认 MySQL 已配置为使用默认数据目录,/var/lib/mysql/,
这就是我们需要移动的目录。确认后,输入exit
然后按“ENTER”离开监视器:
为了确保数据的完整性,我们将在实际更改数据目录之前关闭 MySQL:
systemctl
不显示所有服务管理命令的结果,因此如果您想确保已成功,请使用以下命令:
如果输出的最后一行告诉您服务器已停止,您可以确定它已关闭:
Output
. . .
Jul 18 11:24:20 ubuntu-512mb-nyc1-01 systemd[1]: Stopped MySQL Community Server.
现在服务器已关闭,我们将使用以下命令将现有数据库目录复制到新位置rsync
。使用-a
标志保留权限和其他目录属性,而-v
提供详细输出,以便您可以跟踪进度。
Note:确保目录上没有尾部斜杠,如果使用制表符补全,则可能会添加尾部斜杠。当尾部有斜杠时,rsync
会将目录的内容转储到安装点,而不是将其传输到包含的目录中mysql
目录:
-
sudo rsync -av /var/lib/mysql /mnt/volume-nyc1-01
一旦rsync
完成后,用 .bak 扩展名重命名当前文件夹并保留它,直到我们确认移动成功。通过重新命名,我们将避免新位置和旧位置的文件可能引起的混淆:
-
sudo mv/var/lib/mysql /var/lib/mysql.bak
现在我们准备将注意力转向配置。
MySQL 有多种方法来覆盖配置值。默认情况下,datadir
被设定为/var/lib/mysql
in the /etc/my.cnf
文件。编辑此文件以反映新的数据目录:
找到行中的[mysqld]
块开头为datadir=
,它与带有多个注释的块标题分开。更改随后的路径以反映新位置。此外,由于套接字之前位于数据目录中,因此我们需要将其更新到新位置:
/etc/my.cnf
[mysqld]
. . .
datadir=/mnt/volume-nyc1-01/mysql
socket=/mnt/volume-nyc1-01/mysql/mysql.sock
. . .
更新现有线路后,我们需要添加配置mysql
客户。在文件底部插入以下设置,这样就不会在文件中分割指令[mysqld]
block:
/etc/my.cnf
[client]
port=3306
socket=/mnt/volume-nyc1-01/mysql/mysql.sock
完成后,点击ESCAPE
,然后输入:wq!
保存并退出文件。
现在我们已经更新了配置以使用新位置,我们准备启动 MySQL 并验证我们的工作。
-
sudosystemctl 启动 mysqld
-
sudosystemctl 状态 mysqld
为了确保新的数据目录确实在使用中,请启动 MySQL 监视器。
再次查看数据目录的值:
Output
+----------------------------+
| @@datadir |
+----------------------------+
| /mnt/volume-nyc1-01/mysql/ |
+----------------------------+
1 row in set (0.01 sec)
现在您已经重新启动 MySQL 并确认它正在使用新位置,请借此机会确保您的数据库功能齐全。一旦验证了任何现有数据的完整性,您可以使用以下命令删除备份数据目录sudo rm -Rf /var/lib/mysql.bak
.
在本教程中,我们将 MySQL 的数据目录移动到了新位置,并更新了 SELinux 以适应调整。尽管我们使用的是块存储设备,但无论底层技术如何,此处的说明都应该适合重新定义数据目录的位置。
有关管理 MySQL 数据目录的更多信息,请参阅官方 MySQL 文档中的以下部分: