今天在啓動mysql的時候,使用/etc/init.d/mysqld start 報錯mysql
Starting MySQL (Percona Server).mkdir: cannot create directory `/var/lib/mysql': File exists chown: cannot access `/var/lib/mysql': Permission denied chmod: cannot access `/var/lib/mysql': Permission denied rm: cannot remove `/var/lib/mysql/mysql.sock': Permission denied ERROR! The server quit without updating PID file (/var/run/mysqld/mysqld.pid).
一看這種是權限問題,但查看發現目錄權限已是對的linux
查看啓動腳本,是啓動的時候調用/usr/bin/mysqld_safe啓動進程,兩個都是shell腳本,改用調試模式執行sql
發如今目錄判斷的時候會失效shell
實際上這個目錄是存在的,查看啓動失敗的日誌oracle
也是權限問題,但目錄權限正確,因此可能的問題就出在啓動mysql_safe腳本的時候致使某些問題的出現ui
換用如下方式啓動spa
[shell#] sh /etc/init.d/mysqld start
發現啓動成功,這種狀況至關於直接以root用戶啓動,調試
查看日誌/var/log/audit/audit.log 發現發現時selinux限制了mysql啓動時對數據目錄的chown 日誌
type=AVC msg=audit(1492495884.134:8627): avc: denied { getattr } for pid=11695 comm="chown" path="/var/lib/mysql" dev=dm-0 ino=392235 scontext=unconfined_u:system_r:mysqld_safe_t:s0 tcont ext=unconfined_u:object_r:var_lib_t:s0 tclass=lnk_file
由於這裏咱們用不上selinux直接關掉,臨時關掉的方式以下:code
[shell#] setenforce 0
永久關掉須要修改 /etc/selinux/config 再重啓機器就好
SELINUX=disabled
也能夠打開相關目錄的權限
[shell#]chcon -R -t mysqld_db_t dir
再啓動便不會報錯
附:
關於selinux與mysql相關的一些問題可查看 https://blogs.oracle.com/jsmyth/entry/selinux_and_mysql