當前位置:
首頁 > 知識 > Ubuntu 更改 MySQL 資料庫數據存儲目錄

Ubuntu 更改 MySQL 資料庫數據存儲目錄

(點擊

上方公眾號

,可快速關注)




來源:瀟湘隱者 ,


www.cnblogs.com/kerrycode/p/9795474.html




之前寫過一篇博客「

MySQL更改資料庫數據存儲目錄

」,當時的測試環境是RHEL和CentOS,誰想最近在Ubuntu下面更改MySQL資料庫數據存儲目錄時遇到了之前未遇到的問題,之前的經驗用不上了(或者說之前的總結不是太全面),修改完MySQL資料庫數據存儲目錄後重啟MySQL,發現MySQL服務無法啟動。




root@mylnx2:/etc/mysql/mysql.conf.d# service mysql start


 


Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.





MySQL更改資料庫數據存儲目錄

https://www.cnblogs.com/kerrycode/p/4371938.html




連MySQL的錯誤日誌也未生成,使用service mysql status命令可以輸出一些較詳細的信息,如下所示:





root@mylnx2:/etc/mysql/mysql.conf.d# service mysql status


● mysql.service - MySQL Community Server

   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)


   Active: activating (start-post) (Result: exit-code) since Mon 2018-10-15 22:33:00 CST; 28s ago


  Process: 12947 ExecStart=/usr/sbin/mysqld (code=exited, status=1/FAILURE)


  Process: 12932 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)


 Main PID: 12947 (code=exited, status=1/FAILURE);         : 12948 (mysql-systemd-s)

    Tasks: 2


   Memory: 1.9M


      CPU: 367ms


   CGroup: /system.slice/mysql.service


           └─control

             ├─12948 /bin/bash /usr/share/mysql/mysql-systemd-start post


             └─13045 sleep 1


 


Oct 15 22:33:00 mylnx2 systemd[1]: Starting MySQL Community Server...


Oct 15 22:33:01 mylnx2 mysqld[12947]: 2018-10-15T14:33:01.013763Z 0 [Warning] Changed limits: max_open_files: 1024 (requested 5000)

Oct 15 22:33:01 mylnx2 mysqld[12947]: 2018-10-15T14:33:01.013836Z 0 [Warning] Changed limits: table_open_cache: 431 (requested 2000)


Oct 15 22:33:01 mylnx2 mysqld[12947]: 2018-10-15T14:33:01.207533Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit


Oct 15 22:33:01 mylnx2 mysqld[12947]: 2018-10-15T14:33:01.207663Z 0 [Warning] Can"t create test file /mysql_data/mysql/mylnx2.lower-test


Oct 15 22:33:01 mylnx2 mysqld[12947]: 2018-10-15T14:33:01.207717Z 0 [Note] /usr/sbin/mysqld (mysqld 5.7.23-0ubuntu0.16.04.1-log) starting as process 129


Oct 15 22:33:01 mylnx2 mysqld[12947]: 2018-10-15T14:33:01.215413Z 0 [Warning] Can"t create test file /mysql_data/mysql/mylnx2.lower-test

Oct 15 22:33:01 mylnx2 mysqld[12947]: 2018-10-15T14:33:01.215445Z 0 [Warning] Can"t create test file /mysql_data/mysql/mylnx2.lower-test


Oct 15 22:33:01 mylnx2 systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE




錯誤信息為「[Warning] Can』t create test file /mysql_data/mysql/mylnx2.lower-test」。其實這裡是踩到了「AppArmor」這個坑,之前對Ubuntu了解不多,所以直到遇到這個問題,才了解、知道這麼個概念。下面是百科對AppArmor的介紹:




ppArmor是一個高效和易於使用的Linux系統安全應用程序。AppArmor對操作系統和應用程序所受到的威脅進行從內到外的保護,甚至是未被發現的0day漏洞和未知的應用程序漏洞所導致的攻擊。AppArmor安全策略可以完全定義個別應用程序可以訪問的系統資源與各自的特權。AppArmor包含大量的默認策略,它將先進的靜態分析和基於學習的工具結合起來,AppArmor甚至可以使非常複雜的應用可以使用在很短的時間內應用成功。



AppArmor對MySQL所能使用的目錄許可權做了限制,如下截圖所示,規定了MySQL使用的數據文件路徑許可權。





# cat /etc/apparmor.d/usr.sbin.mysqld







我將MySQL的資料庫數據存儲目錄從 /var/lib/mysql 切換到 /mysql_data/mysql 下面。所以就遇到了上面錯誤,需要修改或新增兩條記錄,從而使mysqld可以使用 /mysql_data/mysql 這個目錄。





/mysql_data/mysql/ r,


/mysql_data/mysql/** rwk,




然後重啟AppArmor服務後,然後就可以重啟MySQL服務了。





sudo service apparmor restart




當然 /etc/apparmor.d/usr.sbin.mysqld 還有 Allow plugin access 需要調整,這個不是重點,在此略過。




猶豫了一會,還是記錄一下這個小小案例!雖然網上已有不少人總結這個,但是自己動手總結一下,印象也深刻一點!




看完本文有收穫?請轉發分享給更多人


關注「ImportNew」,提升Java技能


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 ImportNew 的精彩文章:

AI 泡沫到底存不存在?
Git 內部原理之 Git 引用

TAG:ImportNew |