介绍
数据库随时间增长,有时会超过文件系统上的空间。当它们位于与操作系统的其余部分相同的分区上时,也可能遇到I / O争用。 RAID,网络块存储和其他设备可以提供冗余和其他期望的特征。无论是添加更多空间,评估优化性能的方法,还是希望利用其他存储功能,本教程将指导您重新定位MySQL的数据目录。 这里的说明适用于运行单个MySQL实例的服务器。如果你有多个实例,指导 如何移动MySQL数据目录移到新位置上在Ubuntu 16.04可以帮助你的方向,通过配置设置明确更改位置。先决条件
要完成本指南,您需要:- 一个Ubuntu 16.04服务器与非root用户
sudo
权限 。 您可以了解更多有关如何设置这些权限的用户在我们与Ubuntu 16.04的初始服务器安装指南。 - MySQL服务器 。 如果您尚未设置一个,该如何在Ubuntu上安装MySQL 16.04指南可以帮助你。
- 数据库的备份 。 除非您正在全新安装MySQL,否则应确保备份数据。 该指南如何备份Ubuntu VPS MySQL数据库可以帮助您与此有关。
/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.
从两个输出
systemctl
和
journalctl
的结尾是:
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正常运行。