数据库的大小将会随着时间的推移而增长,有时会超出文件系统的空间。当它们与其余操作系统的部分位于同一分区时,您也可能会遇到I / O争用的问题。RAID,网络块存储和其他设备可以提供冗余和其他功能。无论您是想要添加更多空间,评估优化性能,还是希望利用其他存储功能的优势,本教程都将指导您重新定位MySQL的数据目录。
要完成本指南,您需要:
/mnt/volume-nyc1-01
的块存储设备上。无论您使用什么样的存储,本指南都可以帮助您将数据目录移动到新位置。为了能够顺利移动MySQL的数据目录,让我们先通过使用MySQL命令会话来验证当前的目录位置。
mysql -u root -p
出现提示时,输入MySQL账户和密码,本文以root为例然后从MySQL提示符中选择数据目录:
select @@datadir;
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)
此输出可以确认MySQL已配置为使用默认数据目录/var/lib/mysql/
。确认后,键入exit并按"ENTER"退出监视器:
exit
为了确保数据的完整性,我们将在实际更改数据目录之前关闭MySQL:
sudo systemctl stop mysqld
systemctl
不会显示命令的结果,如果您想确定操作已经成功,请使用以下命令:
sudo systemctl status mysqld
如果输出的最后一行告诉您服务器已停止,那么它就已经关闭:
. . .
Jul 18 11:24:20 ubuntu-512mb-nyc1-01 systemd[1]: Stopped MySQL Community Server.
现在服务器已经关闭,我们接下来使用rsync
将现有的数据库目录复制到新位置。使用-a
命令会保留权限和其他目录属性,同时-v提供详细输出,以便您可以跟踪进度。
注意: 确保目录上尾部没有斜杠(如果使用制表符完成整个操作,则可以添加斜杠)。当有斜杠时,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
会在文件/etc/my.cnf
中设置为/var/lib/mysql
。我们来编辑此文件以更新数据目录:
sudo vi /etc/my.cnf
找到以datadir=
开头的[mysqld]
,该行与带有多个注释的块标题是分开的。更改后面的路径来更新位置。此外,由于socket以前位于数据目录中,我们需要将其更新到新位置:
[mysqld]
. . .
datadir=/mnt/volume-nyc1-01/mysql
socket=/mnt/volume-nyc1-01/mysql/mysql.sock
. . .
更新现有行后,我们需要为mysql
客户端添加配置命令。在文件底部插入以下设置,以便它不会拆分[mysqld]
块中的指令:
[client]
port=3306
socket=/mnt/volume-nyc1-01/mysql/mysql.sock
完成后,按ESC,然后键入:wq!保存并退出文件。
现在我们已经更新了配置的新位置,我们现在可以启动MySQL并验证我们的操作是否成功。
sudo systemctl start mysqld
sudo systemctl status mysqld
要确保新数据目录确实在使用中,请启动MySQL命令行
mysql -u root -p
再次查看数据目录的值:
select @@datadir;
Output+----------------------------+
+----------------------------+
| @@datadir |
+----------------------------+
| /mnt/volume-nyc1-01/mysql/ |
+----------------------------+
1 row in set (0.01 sec)
现在您已重新启动MySQL并确认它正在使用新位置,请确保您的数据库完全正常运行。验证完现有数据后,可以用sudo rm -Rf /var/lib/mysql.bak
删除备份数据目录。
在本教程中,我们将MySQL的数据目录移至新位置并更新SELinux以适应新的调整。虽然我们使用的是块存储设备,但本教程适用于载任何技术下重新定义数据目录的位置。
自建数据库难免会遇到上面的问题,那么,我们还是建议您使用云数据库进行搭建,省去数据迁移等麻烦操作,购买数据库详见:https://cloud.tencent.com/product/cdb-overview
参考文献:《How to Change a MySQL Data Directory to a New Location on CentOS 7 》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。