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

如何使用Symlink更改MySQL数据目录

原创
作者头像
心语花束
修改2018-07-26 17:36:42
3.6K0
修改2018-07-26 17:36:42
举报

介绍

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

此处的说明适用于运行单个MySQL实例的服务器。

准备

要完成本教程,您需要:

  • 具有sudo权限的非root用户的Ubuntu 16.04服务器
  • 一个MySQL服务器
  • 备份数据库。除非您正在使用全新的MySQL安装,否则应确保备份数据。

在此示例中,我们将数据移动到安装在/ mnt / volume-nyc1-01的块存储设备。

无论您使用什么底层存储,本教程都可以帮助您将数据目录移动到新位置。

第一步,移动MySQL数据目录

为确保数据的完整性,我们将关闭MySQL:

代码语言:txt
复制
$ sudo systemctl stop mysql

由于systemctl不显示所有服务管理命令的结果,因此如果您想确定已成功,请使用以下命令:

代码语言:txt
复制
$ sudo systemctl status mysql

如果输出的最后一行告诉您服务器已停止,您可以确定它已关闭:

代码语言:txt
复制
. . .
Jul 18 11:24:20 ubuntu-512mb-nyc1-01 systemd[1]: Stopped MySQL Community Server.

关闭服务器后,我们会将现有数据库目录移动到新位置:

代码语言:txt
复制
$ sudo mv /var/lib/mysql /mnt/volume-nyc1-01/mysql

接下来,我们将创建Symlink:

代码语言:txt
复制
$ sudo ln -s /mnt/volume-nyc1-01/mysql /var/lib/mysql

有了Symlink,这似乎是重新启动MySQL的最佳时机,但在我们成功完成之前还有一件事需要配置。

第二步,配置AppArmor访问控制规则

将MySQL目录移动到与MySQL服务器不同的文件系统时,您需要创建AppArmor别名。

要添加别名,请编辑AppArmor alias文件:

代码语言:txt
复制
sudo nano /etc/apparmor.d/tunables/alias

在文件的底部,添加以下别名规则:

/etc/apparmor.d/tunables/alias. . .alias /var/lib/mysql/ -> /mnt/volume-nyc1-01/mysql/,. . .

要使更改生效,请重新启动AppArmor:

代码语言:txt
复制
sudo systemctl restart apparmor

注意: 如果您跳过AppArmor配置步骤并尝试启动mysql,则会遇到以下错误消息:

代码语言:txt
复制
OutputJob for mysql.service failed because the control process

exited with error code. See "systemctl status mysql.service"

and "journalctl -xe" for details.

systemctljournalctl的输出:

代码语言:txt
复制
OutputJul 18 11:03:24 ubuntu-512mb-nyc1-01 systemd[1]:
mysql.service: Main process exited, code=exited, status=1/FAILURE

由于消息不会在AppArmor和数据目录之间建立显式连接,因此此错误可能需要一些时间才能确定。但是,查看syslog会显示问题:

代码语言:txt
复制
sudo tail /var/log/syslog
代码语言:txt
复制
Nov 24 00:03:40 digitalocean kernel: 
[  437.735748] audit: type=1400 audit(1479945820.037:20): 
apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" 
name="/mnt/volume-nyc1-01/mysql/mysql.lower-test" pid=4228 
comm="mysqld" requested_mask="c" denied_mask="c" fsuid=112 ouid=112

现在我们准备启动MySQL了。

代码语言:txt
复制
$ sudo systemctl start mysql
$ sudo systemctl status mysql

一旦重新启动MySQL,请抓住机会确保数据正常运行并且MySQL按预期运行。

结论

在本教程中,我们移动了MySQL的数据,并使用Symlink使MySQL了解新位置。我们还更新了Ubuntu的AppArmor ACL以适应调整。虽然我们使用的是块存储设备,但此处的说明适用于重新定义数据目录的位置,而不管底层技术如何。但是这种方法仅适用于运行MySQL的单个实例。腾讯云提供云数据库 MySQL(TencentDB for MySQL)让用户可以轻松在云端部署、使用 MySQL 数据库,欢迎使用。


参考文献:《How to Change a MySQL Data Directory to a New Location Using a Symlink》

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

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

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

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

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