在安裝mysql的時候修改了 /etc/my.cnf 配置文件中的datadir的默認路徑后,導致使用systemctl start mysqld.service命令啟動不了:
# 安裝后啟動mysql服務 [root@localhost mysql]# systemctl start mysqld.service Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.
在 /etc/my.cnf 中datadir 和log-error的路徑修改為以下
#datadir=/var/lib/mysql datadir=/data/mysql/data sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION log-error=/data/mysql/log/mysqld.log # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 #log-error=/var/log/mysqld.log
但是總是不能啟動服務。即使修改了 /data/mysql/data的所有權為mysql,連父目錄都修改為mysql了,甚至連/data及其子目錄都修改為777權限,也不能解決問題。最后發現了一篇好文章:
這個原因有二,其中任意的一個原因都會造成你被系統告知這個warning。如果你不是一個專業的linux系統安全工程師,或者你只是個PHP程序員,並沒有對系統安全有深入的研究,你就不會太容易找到它的答案。
第一,selinux,記得當年念書時,字符界面安裝redhat(很古老的操作系統么。。。)的時候,有這么一個選項,通常大家都聽取前輩的建議,改變默認值以不安裝它。但如果你恰好要操作的這台機器開着selinux,它確實能夠使你的mysql無法在新目標位置進行mysql_install_db的操作,並爆出標題所示的警告。一個簡單的解決辦法是使用命令暫時關閉selinux,以便讓你的操作可以繼續下去
setenforce 0
但最好使用一個永久方法,以便在重啟后繼續不要這貨。
修改/etc/selinux/config文件中設置SELINUX=disabled ,然后重啟或等待下次重啟。
第二,apparmor,這個坑爹貨和selinux一樣的坑爹,它也對mysql所能使用的目錄權限做了限制
在 /etc/apparmor.d/usr.sbin.mysqld 這個文件中,有這兩行,規定了mysql使用的數據文件路徑權限
/var/lib/mysql/ r,
/var/lib/mysql/** rwk,
你一定看到了,/var/lib/mysql/就是之前mysql安裝的數據文件默認路徑,apparmor控制這里mysqld可以使用的目錄的權限
我想把數據文件移動到/data/mysql下,那么為了使mysqld可以使用/data/mysql這個目錄,照上面那兩條,增加下面這兩條就可以了
/data/mysql/ r,
/data/mysql/** rwk,
重啟apparmor,/etc/inid.d/apparmor restart
參考:https://blog.csdn.net/hrayha/article/details/46128731