本文的初衷僅供自己做備忘筆記, 內(nèi)容大多從網(wǎng)上搜集和整理, 并非都是自己原創(chuàng).
參考的來源我會在后面注明, 對于可能遺漏的來源, 還請相關原創(chuàng)作者提醒, 非常感謝.
參考來源: https://mariadb.com/kb/en/library/default-data-directory-for-mariadb/
基本操作和MySQL移動是一樣的
停止mariadb
sudo service mariadb stop
創(chuàng)建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/
......
注意文件的權(quán)限, 以及用戶和用戶組都為mysql
, 這個很重要.
遷移文件
假設我們要將mysql目錄移到/home/data_storage下
執(zhí)行
cd /var/lib/
sudo cp -pr mysql/ /home/data_storage
這里p
表示把源文件或目錄下的所具有的權(quán)限一同復制到目標目錄或文件, r
表示遞歸
修改配置文件:
sudo vim /etc/mysql/my.cnf
在[mysqld]下, 修改datadir的值(沒有自己加上)
datadir=/home/data_storage
然后, 保存后啟動mariadb, 至此, mariadb的遷移已完成 (沒成功的繼續(xù)看下面)
關于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
實際在當前環(huán)境中, usr.sbin.mysqld文件里只有空的注釋說明內(nèi)容, 并沒有特殊的配置.直接添加上面的配置反而會出現(xiàn)其他問題. 因此, 個人認為除非必要, 否則這里不用修改.
關于移動的目錄權(quán)限
移動完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目錄的權(quán)限, apparmor配置以外, 還要留意mysql目錄的所有父級目錄的執(zhí)行權(quán)限. 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.
這個坑踩得差點吐血!