Ubuntu迁移mysql数据库到新的目录下

一、如果systemctl status apparmor启动成功可按下面步骤:

1. 先使用下面命令将mysql数据库服务停止:

sudo systemctl stop mysql

2. 迁移到挂载新盘 /mnt/data/

方式一:sudo mv /var/lib/mysql /mnt/data/
方式二:sudo cp -a /var/lib/mysql /mnt/data/
方式三:sudo rsync -av /var/lib/mysql /mnt/data/

3.修改mysql配置文件my.cnf

mysql数据库会按顺序优先级从/etc/my.cnf、/etc/mysql/my.cnf、/usr/etc/my.cnf、~/.my.cnf四个位置找my.cnf配置文件,一旦找到就不再继续往下找。Ubuntu默认将my.cnf配置文件放在/etc/mysql/my.cnf位置,所以在/etc/my.cnf位置没有找到这个配置文件。

选择自己使用的文本编辑器编辑my.cnf配置文件,我用vim,所以sudo vim /etc/mysql/my.cnf。一样需要sudo,使用root权限编辑。将其中[mysqld]标签下的datadir属性值改为新数据库目录路径/mnt/data/mysql,如图:
如图注释并替换

 
 

4. 修改系统安全模块usr.bin.mysqld文件

sudo vim /etc/apparmor.d/usr.sbin.mysqld

找到其中的
/var/lib/mysql/ r,
/var/lib/mysql/** rwk,

两行权限声明,可以在前面加上#好注释掉。然后对照格式,加入新路径的权限声明:
/mnt/data/mysql/ r,
/mnt/data/mysql/** rwk,

5.修改系统安全模块abstractions/mysql文件

sudo vim /etc/apparmor.d/abstractions/mysql

如图注释并替换

 

6. 重启

sudo systemctl restart apparmor
sudo systemctl restart mysql

二、如果没有systemctl status apparmor服务:

1. 先使用下面命令将mysql数据库服务停止:

sudo systemctl stop mysql

2. 迁移到挂载新盘 /mnt/data/

方式一:sudo rsync -av /var/lib/mysql /mnt/data/

3.修改mysql配置文件my.cnf

mysql数据库会按顺序优先级从/etc/my.cnf、/etc/mysql/my.cnf、/usr/etc/my.cnf、~/.my.cnf四个位置找my.cnf配置文件,一旦找到就不再继续往下找。Ubuntu默认将my.cnf配置文件放在/etc/mysql/my.cnf位置,所以在/etc/my.cnf位置没有找到这个配置文件。

选择自己使用的文本编辑器编辑my.cnf配置文件,我用vim,所以sudo vim /etc/mysql/my.cnf。一样需要sudo,使用root权限编辑。将其中[mysqld]标签下的datadir属性值改为新数据库目录路径/mnt/data/mysql,如图:
如图注释并替换

 

4. 重启

sudo systemctl restart mysql 
如果遇见Can't Create Test File错误。

1. 要保证数据目录属于服务的所有者,一般是mysql用户

2. 保证数据目录有“x”执行权限

3. 保证数据目录的所有父级目录对用户、用户组、以及其他均有“x”执行权限

4. 再就是检查systemd、selinux还有apparmor了

前三条确定没有问题后,根据第4条继续追查发现问题所在:

默认的systemd管理单元 mariadb.service 中会有ProtectHome=true的配置,即数据目录在/home下,通过systemctl或者Service启动数据服务是无法启动的,因为home目录受保护了,所有编辑mariadb.service 中的ProtectHome修改为false后可以正常启动。

posted @ 2022-10-08 10:17  *^VV^*  阅读(186)  评论(0编辑  收藏  举报