前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在服务器上更改MySQL数据库目录

如何在服务器上更改MySQL数据库目录

原创
作者头像
不会飞的蝴蝶
修改2018-07-18 14:51:33
6.1K0
修改2018-07-18 14:51:33
举报

介绍

数据库的大小将会随着时间的推移而增长,有时会超出文件系统的空间。当它们与其余操作系统的部分位于同一分区时,您也可能会遇到I / O争用的问题。RAID,网络块存储和其他设备可以提供冗余和其他功能。无论您是想要添加更多空间,评估优化性能,还是希望利用其他存储功能的优势,本教程都将指导您重新定位MySQL的数据目录。

准备

要完成本指南,您需要:

  • CentOS 7服务器,其中非root用户需要具有sudo权限并安装了MySQL 。可以前往腾讯云购买CVM服务器
  • 在这个例子中,我们会将数据移动到挂载在/mnt/volume-nyc1-01的块存储设备上。无论您使用什么样的存储,本指南都可以帮助您将数据目录移动到新位置。

第一步、移动MySQL数据目录

为了能够顺利移动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

现在我们已经更新了配置的新位置,我们现在可以启动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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第一步、移动MySQL数据目录
  • 第二步、指向新数据位置
  • 第三步、重启MySQL
  • 结论
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档