Mysql 的默认安装目录为 /var/lib/mysql
,本文章就以 /var/lib/mysql
为例子通过以下几步来进行 Mysql 数据目录数据的转移。
注:可根据实际安装目录进行修改
第1步:准备新的数据目录
首先需要创建一个用于存储 Mysql 数据的新目录,并确保新目录有足够的存储空间来满足你当前以及未来的数据需求。
例如你希望将 /application/mysql/data
作为新目录:
sudo mkdir -p /application/mysql/data
接下来需要给新目录分配权限以匹配默认Mysql数据目录的权限:
sudo chown -R mysql:mysql /application/mysql/data
sudo chmod 750 /application/mysql/data
第2步:停止 MySql 服务
在对 Mysql 配置进行修改前,需要先将 Mysql 服务停止,以免数据的损坏或丢失:
sudo systemctl stop mysqld
第3步:将现有数据复制到新目录
在 Mysql 服务已停止的前提下,可以安全的将原 Mysql 目录数据复制到新目录下,使用 resync 命令来保留文件权限和所有权:
sudo rsync -av /var/lib/mysql/* /application/mysql/data
如果提示以下报错,就将
/var/lib/mysql/*
改为/var/lib/mysql/
,具体原因为shell无法正确扩展带有通配符(*)的路径
sending incremental file list rsync: link_stat "/var/lib/mysql/*" failed: No such file or directory (2) sent 18 bytes received 12 bytes 60.00 bytes/sec total size is 0 speedup is 0.00 rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]
第4步:更新 MySql 配置
将数据目移至新目录后,需要进行 Mysql 配置文件的更改(通常位于 /etc/my.cnf
或 /etc/mysql/my.cnf
):
sudo vi /etc/my.cnf
找到并修改 datadir
、 socket
以指向新目录位置:
[mysqld]
datadir=/application/mysql/data
[client]
socket=/application/mysql/data/mysql.sock
如果这些选项不存在,就将它们添加到对应位置下。
保存并关闭配置文件。
第5步:更新 Systemd 配置(可选)
如果你的系统使用 systemd
来管理 Mysql 服务,那么需要修改 Mysql systemd 服务文件来映射至新的数据目录(通常位于 /usr/lib/systemd/system/mysqld.service
或 /lib/systemd/system/mysql.service
):
sudo vi /usr/lib/systemd/system/mysqld.service
找到 ExecStart
后添加 --datadir
和 --socket
配置:
ExecStart=/usr/sbin/mysqld --datadir=/application/mysql/data --socket=/application/mysql/data/mysql.sock
保存并关闭文件后重新加载 systemd 配置:
sudo systemctl daemon-reload
第6步:启动 Mysql 服务
重新启动 Mysql 服务:
sudo systemctl start mysqld
第 7 步:验证更改
如果需要验证更改是否成功,先检查 Mysql 是否正在运行:
sudo systemctl status mysqld
还可以通过 Mysql 命令工具等客户端链接至 Mysql 服务器,输入以下命令验证是否正在使用新的数据目录:
mysql -u root -p -e 'SHOW VARIABLES WHERE Variable_Name = "datadir";'
如返回新目录就代表成功。
第 8 步:删除或备份旧数据目录(可选)
如果修改数据目录后一切都按预期工作,你可以选择删除旧的数据目录:
sudo rm -rf /var/lib/mysql
或者创建备份文件进行保管:
sudo mv /var/lib/mysql /application/mysql/mysql_backup