本文的初衷仅供自己做备忘笔记, 内容大多从网上搜集和整理, 并非都是自己原创.
参考的来源我会在后面注明, 对于可能遗漏的来源, 还请相关原创作者提醒, 非常感谢.
参考来源: https://mariadb.com/kb/en/library/default-data-directory-for-mariadb/
基本操作和MySQL移动是一样的
停止mariadb
sudo service mariadb stop
创建mysql存放的目标文件夹
一般mysql默认的存储目录在/var/lib/mysql
中
/var/lib$ ll
......
drwxr-xr-x 2 root root 4096 11月 25 00:06 mlocate/
drwxr-xr-x 4 mysql mysql 4096 11月 25 00:30 mysql/
drwxr-xr-x 2 root root 4096 11月 17 11:34 NetworkManager/
......
注意文件的权限, 以及用户和用户组都为mysql
, 这个很重要.
迁移文件
假设我们要将mysql目录移到/home/data_storage下
执行
cd /var/lib/
sudo cp -pr mysql/ /home/data_storage
这里p
表示把源文件或目录下的所具有的权限一同复制到目标目录或文件, r
表示递归
修改配置文件:
sudo vim /etc/mysql/my.cnf
在[mysqld]下, 修改datadir的值(没有自己加上)
datadir=/home/data_storage
然后, 保存后启动mariadb, 至此, mariadb的迁移已完成 (没成功的继续看下面)
关于ubuntu的apparmor
在ubuntu中,有些敏感操作受到了apparmor的限制 ,mysql也受到了限制, 所以要修改这个
sudo vim /etc/apparmor.d/usr.sbin.mysqld
加入
/home/data_storage/ r,
/home/data_storage/** rwk,
然后在启动mysql之前, 重新加载apparmor
sudo service apparmor reload
实际在当前环境中, usr.sbin.mysqld文件里只有空的注释说明内容, 并没有特殊的配置.直接添加上面的配置反而会出现其他问题. 因此, 个人认为除非必要, 否则这里不用修改.
关于移动的目录权限
移动完mysql目录, 并修改好datadir后, 启动仍可能会遇到如下错误:
May 13 10:24:28 mariadb3 mysqld[19221]: 2019-05-13 10:24:28 0 [Warning] Can't create test file /usr/local/data/mariadb/mariadb3.lower-test
May 13 10:24:28 mariadb3 mysqld[19221]: 2019-05-13 10:24:28 0 [ERROR] Aborting
除了要检查mysql目录的权限, apparmor配置以外, 还要留意mysql目录的所有父级目录的执行权限. mariadb官方是如下要求的:
This is usually a permission error on the directory in which this file is being written. Ensure that the entire datadir is owned by the user running mysqld, usually mysql. Ensure that directories have the "x" (execute) directory permissions for the owner. Ensure that all the parent directories of the datadir upwards have "x" (execute) permissions for all (user, group, and other).
Once this is checked look at the systemd and selinux documentation below, or apparmor.
这个坑踩得差点吐血!