Linux - Change MySQL default directory on CentOS 6.4

這幾天為了要將備份出來的MySQL files import到某一台Server下,搞了好久,重點是卡在安

裝的預設目錄,當改到其他目錄後,MySQL服務卻無法順利start,實在是XXOO。

改變預設目錄的原因是因為本機的storage容量不夠,因此就得安裝到NAS下的目錄內!

上網查找了一下,發現有很多人跟我一樣有以下的error message:

mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
mysqld_safe Starting mysqld daemon with databases from /home/disk1/mysql
[Warning] Can't create test file /home/disk1/mysql/XXXX.lower-test
[Warning] Can't create test file /home/disk1/mysql/XXXX.lower-test
/usr/libexec/mysqld: Can't change dir to '/home/disk1/mysql/' (Errcode: 13)
[ERROR] Aborting
[Note] /usr/libexec/mysqld: Shutdown complete
mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

重點來了,很多人提到是由於SELinux的安全文件沒有設定好,導致mysql沒有權限正常啟動

。如:鳥哥有提到  "在預設的 targeted 政策中, Identify 與 Role 欄位基本上是不重要的

!重要的在於這個類型 (type) 欄位!"

主要就是當我針對新的目錄,如上是在/home/disk1/mysql的目錄下

mysql的 安全性本文的type權限應為:

# ls -Z | grep mysql

drwxr-sr-x. mysql  mysql  unconfined_u:object_r:mysqld_db_t:s0 mysql

是的就是mysqld_db_t,相關的程序可以參閱這篇文章,在此不多加贅述!裡面都把步驟寫

得很詳細!

但是,如此依樣畫葫蘆在啟用時還是[failed],去查找了一下log一樣是上面的錯誤!

重複試了很多就是找不出該怎麼處理,但是呢?若換到/home/mysql內就沒問題(照上面的教

學),另外就是針對SELinux設為permissive,則在disk1的mysql目錄也就會正常(這是當然),

但這樣做是不OK的,且有安全性問題。

因此我就查詢disk1目錄安全性本文目前的設定,如下

drwsrwsrwx. root     root     system_u:object_r:file_t:s0 disk1

發現他的type為file_t,想想可能是這個type使得mysql無權限正常去存取內部的mysql目錄

,因此將此disk1目錄的type設為與其他/home/user一樣的type,即為:

drwsrwsrwx. root     root     system_u:object_r:user_home_dir_t:s0 disk1

如此一來,# service mysqld restart在start的部分總算是[success]


從這個經驗可以看到問題總是會因應當下的情況而有不同的變化,大家提供了好的建議

,但重點還是取之在自己是否能夠多方觀察囉,方能順利解決不同的狀況!由於不太熟

Linux所以就在這卡了一些時間XD,也許大家一開始就會注意到上層目錄的問題了orz..

留言