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

介绍

数据库的大小将会随着时间的推移而增长,有时会超出文件系统的空间。当它们与其余操作系统的部分位于同一分区时,您也可能会遇到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 》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能

带你构建你的的第一个Python和Django应用程序

群内不定时分享干货,包括最新的python企业案例学习资料和零基础入门教程,欢迎初学和进阶中的小伙伴入群学习交流 ? 您以前可能听说过Python,特别是如果您...

2535
来自专栏潘嘉兴的专栏

手把手教你如何优化linux服务器

服务器的优化是我们最小化安装系统后应该做的事情,下面是一些常见的基本的优化服务器的方法。关闭不需要的服务。列出需要启动的的服务crond、network、ssh...

6410
来自专栏数据和云

深入剖析:RAC的全局死锁问题

杨廷琨(yangtingkun) 云和恩墨 CTO 高级咨询顾问,Oracle ACE 总监,ITPUB Oracle 数据库管理版版主 RAC的全局死锁时间检...

4459
来自专栏北京马哥教育

出了Linux 故障找不到方法?看大牛简单、朴实的解决思路

本文由马哥教育Linux云计算面授班23期学员推荐,转载自互联网,作者为Lis,Linux资深技术专家,内容略经小编改编和加工,观点跟作者无关,最后感谢作者的辛...

4386
来自专栏北京马哥教育

Linux 系统结构详解

Linux系统一般有4个主要部分: 内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管...

6123
来自专栏java架构师

Hadoop学习6--里程碑式的开始之执行第一个程序wordcount

一、先在HDFS文件系统创建对应的目录,具体如下: 1、待处理文件存放目录  /data/wordcount(之所以创建wordcount,是为了对文件分类,对...

2726
来自专栏阮一峰的网络日志

SSH原理与运用(二):远程操作与端口转发

接着前一次的文章,继续介绍SSH的用法。 ======================================= SSH原理与运用(二):远程操作与端口...

3857
来自专栏Laoqi's Linux运维专列

Nginx+Tomcat实现Web服务器的负载均衡

5056
来自专栏文渊之博

事务日志还原的次意外的操作失误

前几天新发布的一套程序发生了一次意外的操作失误,程序员修改某个表的指定范围的指定字段的时候,误操作导致更新操作没有执行where,直接引起该表指定字段全部变为更...

2119
来自专栏芋道源码1024

点我达分布式任务调度系统-DaJob

随着互联网的发展,应用服务中的定时任务数量日益增加,常规的垂直应用架构已无法应对,分布式服务架构势在必行。同时,也迫切需要一个分布式任务调度系统来管理分...

4072

扫码关注云+社区

领取腾讯云代金券