今天部署MySQL,在使用mysql_install_db,初始化數據庫時報以下錯誤mysql
180622 11:36:38 mysqld_safe Starting mysqld daemon with databases from /data/3311/data/ 2018-06-22 11:36:39 0 [Note] /usr/sbin/mysqld (mysqld 5.6.30-log) starting as process 7008 ... 2018-06-22 11:36:39 7008 [Warning] Can't create test file /data/3311/data/ip-172-31-25-230.lower-test 2018-06-22 11:36:39 7008 [Warning] Can't create test file /data/3311/data/ip-172-31-25-230.lower-test 180622 11:36:39 mysqld_safe mysqld from pid file /data/3311/run/mysqld3311.pid ended
一直提示不能建立,驗證了目錄權限時沒問題的,在被系統坑了幾個小時以後,找到了解決的方法。linux
這個緣由有二,其中任意的一個緣由都會形成你被系統告知這個warning。sql
第一,selinux,若是你剛好要操做的這臺機器開着selinux,它確實可以使你的mysql沒法在新目標位置進行mysql_install_db的操做,並爆出標題所示的警告。數據庫
一個簡單的解決辦法是使用命令暫時關閉selinux,以便讓你的操做能夠繼續下去bash
setenforce 0
但最好使用一個永久方法,以便在重啓後繼續不要這貨。app
修改/etc/selinux/config文件中設置SELINUX=disabled ,而後重啓或等待下次重啓。spa
第二,apparmor,這個坑爹貨和selinux同樣的坑爹,它也對mysql所能使用的目錄權限作了限制rest
在 /etc/apparmor.d/usr.sbin.mysqld 這個文件中,有這兩行,規定了mysql使用的數據文件路徑權限code
/var/lib/mysql/ r, /var/lib/mysql/** rwk,
你必定看到了,/var/lib/mysql/就是以前mysql安裝的數據文件默認路徑,apparmor控制這裏mysqld可使用的目錄的權限
我想把數據文件移動到/data/3311下,那麼爲了使mysqld可使用/data/3311這個目錄,照上面那兩條,增長下面這兩條就能夠了blog
/data/3311/ r, /data/3311/** rwk,
重啓apparmor
/etc/inid.d/apparmor restart
以後,就能夠順利地幹你想幹的事兒了!