How to change MySQL server's data directory on Ubuntu

How to change MySQL server’s data directory on Ubuntu

背景

MySQL server

  1. MySQL server 的缺省 Data 目录是 /var/lib/mysql
  2. /var/lib/mysql 目录一般在 / 分区下
  3. / 区一般都不大,而且不推荐放数据
  4. 所以但凡正常 MySQL server,都存在 Data 目录放真正数据分区的需求
  5. 如果刚开始时没有设置好 Data 目录在数据分区,那么后来都有迁移 Data 目录到数据分区的需求

Ubuntu

  1. AppArmor 是强制性访问控制(MAC)系统,是对内核(LSM)的增强,可以将程序限制在有限的资源集中。
  2. AppArmor 在 Ubuntu 系统里基本上缺省启动生效。
  3. Ubuntu 下的 MySQL server 缺省配置的有 AppArmor 设置。
  4. 所以要修改 MySQL Server’s Data 目录,需要先修改 MySQL server 的 AppArmor 设置

具体步骤

修改 AppArmor 配置并使之生效

1
2
3
4
5
6
cat <<EOF > /etc/apparmor.d/local/usr.sbin.mysqld
/opt/ r,
/opt/** rwk,
EOF

systemctl reload apparmor;

MySQL server

1
2
3
4
5
6
7
8
systemctl stop mysql;
cd /var/lib;
tar czf - mysql | (cd /opt/; tar xvf -)
mv mysql mysql.20200528;
ln -s /opt/mysql .
chown -h mysql:mysql /var/lib/mysql;
systemctl start mysql;
# rm -rf mysql.20200528; # exec it later