【MySQL】AppArmor導致datadir遷移無法啟動&初始化失敗
【問題描述】:
行為:透過apt-get在一臺ubuntu的機子上新裝一個mysql做本地日誌儲存,
由於預設datadir在/var/lib/mysql下,所以準備重新初始化datadir:
報錯如下:
給/data/mysql_data加了對應的許可權,再一次執行,報同樣錯。
於是乾脆直接將/var/lib/mysql整個資料夾遷移到/data/mysql_data下,再啟動服務:
cp過去之後,修改/etc/mysql/my.cnf中的datadir位置,然後mysqld_safe啟動,發現不能啟動:
檢視錯誤日誌發現報錯找不到mysql schema下的plugin.frm檔案:
……………………
再次確認目錄及檔案的許可權,然後確認檔案的存在之後,啟動依然失敗,報錯不變。
……………………
【解決方案】:
然後想到Ubuntu和CentOS檔案安全策略可能有一些不一樣,然後查到了這樣的東西:(P.S. 公司DB server都是部署在CentOS上的,這次安在Ubuntu是特例)
Ubuntu下預設安裝了並存在一個AppArmor的服務,這個服務是用於訪問控制的。
在以apt-get安裝mysql時,個人猜測可能在AppArmor的配置中限制了訪問限制——
導致mysqld_safe與mysqld程式無法讀寫新移植的datadir目錄中的檔案,也同樣導致了mysql_install_db無法在對應的mysql schema下建立檔案。
解決方法很簡單,透過編輯器開啟此檔案,並重新讓AppArmor載入最新的配置即可:
在該usr.sbin.mysqld配置檔案中,註釋掉部分目錄(這些目錄是my.cnf中做了修改的):
因為我在my.cnf中修改了pid-file、socket、datadir、log_error,所以我對應註釋掉了這些目錄:
當然,也可以簡單直接刪掉這些。
並緊接著在其下新增新的datadir目錄(注意以逗號做結束符)
最後讓AppArmor重新載入:
再次啟動mysqld即可成功。(當然重新初始化mysql_install_db也是可以的了)
P.S. 當然也可以粗暴地直接停掉apparmor服務。
參考文件:
作者微信公眾號(持續更新)
行為:透過apt-get在一臺ubuntu的機子上新裝一個mysql做本地日誌儲存,
由於預設datadir在/var/lib/mysql下,所以準備重新初始化datadir:
- mysql_install_db --user=mysql --datadir=/data/mysql_data --basedir=/usr
- 160902 15:25:41 [Note] /usr/sbin/mysqld (mysqld 5.5.50-0ubuntu0.14.04.1) starting as process 25512 ...
- 160902 15:25:41 [Warning] Can't create test file /data/mysql_data/10-8-20-62.lower-test
- 160902 15:25:41 [Warning] Can't create test file /data/mysql_data/10-8-20-62.lower-test
- ERROR: 1005 Can't create table 'db' (errno: 13)
- 160902 15:25:41 [ERROR] Aborting
- 160902 15:25:41 [Note] /usr/sbin/mysqld: Shutdown complete
-
- Installation of system tables failed! Examine the logs in
- /data/mysql_data for more information.
於是乾脆直接將/var/lib/mysql整個資料夾遷移到/data/mysql_data下,再啟動服務:
cp過去之後,修改/etc/mysql/my.cnf中的datadir位置,然後mysqld_safe啟動,發現不能啟動:
- mysqld_safe mysqld from pid file /data/mysql_data/mysqld.pid ended
檢視錯誤日誌發現報錯找不到mysql schema下的plugin.frm檔案:
- 160902 15:26:51 [Note] Plugin 'FEDERATED' is disabled.
- /usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
- 160902 15:26:51 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
……………………
再次確認目錄及檔案的許可權,然後確認檔案的存在之後,啟動依然失敗,報錯不變。
……………………
【解決方案】:
然後想到Ubuntu和CentOS檔案安全策略可能有一些不一樣,然後查到了這樣的東西:(P.S. 公司DB server都是部署在CentOS上的,這次安在Ubuntu是特例)
Ubuntu下預設安裝了並存在一個AppArmor的服務,這個服務是用於訪問控制的。
在以apt-get安裝mysql時,個人猜測可能在AppArmor的配置中限制了訪問限制——
導致mysqld_safe與mysqld程式無法讀寫新移植的datadir目錄中的檔案,也同樣導致了mysql_install_db無法在對應的mysql schema下建立檔案。
解決方法很簡單,透過編輯器開啟此檔案,並重新讓AppArmor載入最新的配置即可:
- vi /etc/apparmor.d/usr.sbin.mysqld
在該usr.sbin.mysqld配置檔案中,註釋掉部分目錄(這些目錄是my.cnf中做了修改的):
因為我在my.cnf中修改了pid-file、socket、datadir、log_error,所以我對應註釋掉了這些目錄:
- #/var/log/mysql.log rw,
- #/var/log/mysql.err rw,
- #/var/lib/mysql/ r,
- #/var/lib/mysql/** rwk,
- #/var/log/mysql/ r,
- #/var/log/mysql/* rw,
- #/var/run/mysqld/mysqld.pid rw,
- #/var/run/mysqld/mysqld.sock w,
- #/run/mysqld/mysqld.pid rw,
並緊接著在其下新增新的datadir目錄(注意以逗號做結束符)
- /data/mysql_data rw,
最後讓AppArmor重新載入:
- # /etc/init.d/apparmor reload
- * Reloading AppArmor profiles
- Skipping profile in /etc/apparmor.d/disable: usr.sbin.rsyslogd
- ...done.
再次啟動mysqld即可成功。(當然重新初始化mysql_install_db也是可以的了)
P.S. 當然也可以粗暴地直接停掉apparmor服務。
參考文件:
作者微信公眾號(持續更新)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-2124411/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sock鎖檔案導致的MySQL啟動失敗MySql
- MySQL啟動失敗MySql
- dota2啟動失敗 初始化vulkan失敗
- RAC節點啟動失敗--ASM無法連線ASM
- Electron安裝過程深入解析(讀完此文解決Electron安裝失敗導致的無法啟動,無法打包的問題)
- ghost win10無法啟動修復失敗怎麼修復_ghost win10無法啟動修復失敗如何解決Win10
- LightDB/Postgresql 記錄客戶端啟動版本問題導致啟動失敗問題SQL客戶端
- mysql(mariadb)啟動失敗解決方法MySql
- MongoDB例項重啟失敗探究(大事務Redo導致)MongoDB
- 解決一次gitlab因異常關機導致啟動失敗Gitlab
- MySQL時區導致無法產生表MySql
- MySQL服務名無效或者MySQL正在啟動 MySQL無法啟動MySql
- 神奇的DEBUG:因為異常導致MongoDB容器無法啟動MongoDB
- docker啟動失敗Docker
- tomcat 啟動失敗Tomcat
- easyswoole啟動失敗
- sqlplus啟動失敗SQL
- 開啟 Keep-Alive 可能會導致http 請求偶發失敗Keep-AliveHTTP
- CentOS 7下mysql 8修改datadir之後不能啟動CentOSMySql
- springboot衝突導致的發版失敗Spring Boot
- MySql安裝過程中初始化失敗MySql
- win10系統無法正常執行apmserv顯示apache和mysql啟動失敗怎麼辦Win10ApacheMySql
- FORTRAN動態陣列分配失敗導致執行時Access Violation陣列
- 啟動Hbase Shell失敗——找不到或無法載入主類org.jruby.MainAI
- ubuntu核心切換失敗,無法啟動,bios不停檢測情況修復UbuntuiOS
- Windows10系統更新失敗無法啟動出現黑屏如何解決Windows
- 故障分析 | DDL 導致的 Xtrabackup 備份失敗
- Docker 導致阿里雲 ECS 內網互通失敗Docker阿里內網
- win10系統重置系統初始化失敗怎麼辦_win10無法重置出現初始化失敗如何處理Win10
- Win7 Nginx啟動失敗 cmd命令失敗Win7Nginx
- hive初始化mysql資料庫失敗的原因HiveMySql資料庫
- SQL Server 因設定最大記憶體過小導致無法啟動SQLServer記憶體
- 系統變數group_replication_group_seeds為空導致MySQL節點無法啟動組複製變數MySql
- innodb_undo_tablespaces導致Mysql啟動報錯MySql
- 應用使用JNDI,資料庫無法連線,導致的程序無法啟動問題處理資料庫
- eclipse: workspace出錯導致無法啟用的解決Eclipse
- Oracle歸檔檔案丟失導致OGG不用啟動Oracle
- Windows系統解決PhPStudy MySQL啟動失敗問題WindowsPHPMySql
- 迴圈引用導致的json序列化失敗JSON