一、停止 MySQL 服务
首先,必须停止 MySQL 服务以确保数据文件在移动过程中不会被访问或修改。
sudo systemctl stop mysql
二、创建新目录
创建一个新的目录来存储 MySQL 数据文件。例如
mkdir -p /new/mysql/data
三、设置权限
确保 MySQL 用户具有对新目录的适当权限。通常,MySQL 用户是 mysql。
sudo chown -R mysql:mysql /new/mysql/data
sudo chmod 750 /new/mysql/data
四、复制数据文件
将现有的数据文件(一般位于/var/lib/mysql/)复制到新目录。可以使用 rsync 来确保所有权和权限得到保留。
sudo rsync -av /var/lib/mysql/ /new/mysql/data/
如果 rsync 命令不存在,则安装
apt install -y rsync
五、修改 MySQL 配置文件
编辑 MySQL 的配置文件(通常是 /etc/mysql/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf),找到 datadir 配置项,并将其更新为新的数据目录。
如果没有 datadir 配置项,则需要在 mysqld 下手动添加
[mysqld]
datadir=/new/mysql/data
找到并修改 datadir 行
datadir = /new/mysql/data
六、更新 AppArmor 配置(如果适用)
如果系统使用 AppArmor,则需要更新其配置以允许 MySQL 访问新目录。编辑 /etc/apparmor.d/usr.sbin.mysqld 文件,添加新数据目录路径。
# 使用cat命令判断该文件是否存在
cat /etc/apparmor.d/usr.sbin.mysqld
# 如果存在则编辑
vim /etc/apparmor.d/usr.sbin.mysqld
添加以下行:
plaintext
/new/mysql/data/ r,
/new/mysql/data/** rwk,
然后重新加载 AppArmor 配置:
sudo systemctl reload apparmor
七、启动 MySQL 服务
启动 MySQL 服务并验证其是否正常运行。
sudo systemctl start mysql
八、验证更改
检查 MySQL 是否正常运行,并确认数据目录已更改。可以通过查看 MySQL 的状态或日志文件来验证。
sudo systemctl status mysql
或查看 MySQL 日志(通常位于 /var/log/mysql/error.log)。
九、清理旧数据目录
确认一切正常后,可以删除旧的数据目录以释放空间。
sudo rm -rf /var/lib/mysql/
通过这些步骤,你可以将 MySQL 数据文件移动到新的位置。在此过程中,确保所有操作都备份好数据,以防出现任何问题。