如何使用符号链接将MySQL数据目录更改为新位置

介绍

数据库随时间增长,有时会超过文件系统上的空间。当它们位于与操作系统的其余部分相同的分区上时,也可能遇到I / O争用。 RAID,网络块存储和其他设备可以提供冗余和其他期望的特征。无论是添加更多空间,评估优化性能的方法,还是希望利用其他存储功能,本教程将指导您重新定位MySQL的数据目录。 这里的说明适用于运行单个MySQL实例的服务器。如果你有多个实例,指导 如何移动MySQL数据目录移到新位置上在Ubuntu 16.04可以帮助你的方向,通过配置设置明确更改位置。

先决条件

要完成本指南,您需要: 在这个例子中,我们将数据移动到安装在块存储设备 /mnt/volume-nyc1-01 。 你可以学习如何设置一个在 如何使用块存储上DigitalOcean指南。 无论您使用什么底层存储,本指南都可以帮助您将数据目录移动到新位置。

第1步 - 移动MySQL数据目录

为了确保数据的完整性,我们将关闭MySQL:
sudo systemctl stop mysql
systemctl不显示所有服务管理命令的结果,所以如果你想确保你已经成功了,请使用以下命令:
sudo systemctl status mysql
如果输出的最后一行告诉您服务器已停止,您可以确定它已关闭:
Output. . .
Jul 18 11:24:20 ubuntu-512mb-nyc1-01 systemd[1]: Stopped MySQL Community Server.
服务器关闭后,我们将现有的数据库目录移动到新位置:
sudo mv /var/lib/mysql /mnt/volume-nyc1-01/mysql
接下来,我们将创建符号链接:
sudo ln -s /mnt/volume-nyc1-01/mysql /var/lib/mysql
使用符号链接到位,这似乎是再次启动MySQL的正确时间,但还有一件事要配置,我们才能成功。

第2步 - 配置AppArmor访问控制规则

当您将MySQL目录移动到与MySQL服务器不同的文件系统时,您需要创建一个AppArmor别名。 要添加别名,编辑AppArmor的 alias文件:
sudo nano /etc/apparmor.d/tunables/alias
在文件底部,添加以下别名规则:
/etc/apparmor.d/tunables/alias
. . .
alias /var/lib/mysql/ -> /mnt/volume-nyc1-01/mysql/,
. . .
要使更改生效,请重新启动AppArmor:
sudo systemctl restart apparmor
注意: 如果你跳过了AppArmor的配置步骤,并试图启动 mysql ,你会碰到以下错误信息:
OutputJob for mysql.service failed because the control process 
exited with error code. See "systemctl status mysql.service" 
and "journalctl -xe" for details.
从两个输出 systemctljournalctl的结尾是:
OutputJul 18 11:03:24 ubuntu-512mb-nyc1-01 systemd[1]: 
mysql.service: Main process exited, code=exited, status=1/FAILURE
由于消息不会在AppArmor和数据目录之间建立明确的连接,因此此错误可能需要一段时间才能确定。然而,一看 syslog将显示问题:
sudo tail /var/log/syslog
OutputNov 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。
sudo systemctl start mysql
sudo systemctl status mysql
重新启动MySQL之后,请确保数据正常,并确保MySQL正常运行。

结论

在本教程中,我们移动了MySQL的数据,并使用符号链接使MySQL意识到新位置。我们还更新了Ubuntu的AppArmor ACL,以适应调整。虽然我们使用块存储设备,但这里的说明应适合重新定义数据目录的位置,而不考虑底层技术。 这种方法只适用于运行MySQL的单个实例。如果您需要支持在一台服务器上运行多个MySQL实例, 如何移动MySQL数据目录移到新位置上在Ubuntu 16.04可以帮助你。
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏