這幾天為了要將備份出來的MySQL files import到某一台Server下,搞了好久,重點是卡在安
裝的預設目錄,當改到其他目錄後,MySQL服務卻無法順利start,實在是XXOO。
改變預設目錄的原因是因為本機的storage容量不夠,因此就得安裝到NAS下的目錄內!
上網查找了一下,發現有很多人跟我一樣有以下的error message:
重點來了,很多人提到是由於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..
裝的預設目錄,當改到其他目錄後,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..
留言
張貼留言