溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

AppArmor導(dǎo)致datadir遷移無法啟動(dòng)或初始化失敗該怎么辦

發(fā)布時(shí)間:2021-11-16 15:29:21 來源:億速云 閱讀:258 作者:柒染 欄目:MySQL數(shù)據(jù)庫

AppArmor導(dǎo)致datadir遷移無法啟動(dòng)或初始化失敗該怎么辦,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

【問題描述】:
行為:通過apt-get在一臺(tái)ubuntu的機(jī)子上新裝一個(gè)mysql做本地日志存儲(chǔ),
由于默認(rèn)datadir在/var/lib/mysql下,所以準(zhǔn)備重新初始化datadir:

  1. mysql_install_db --user=mysql --datadir=/data/mysql_data --basedir=/usr

報(bào)錯(cuò)如下:

  1. 160902 15:25:41 [Note] /usr/sbin/mysqld (mysqld 5.5.50-0ubuntu0.14.04.1) starting as process 25512 ...

  2. 160902 15:25:41 [Warning] Can't create test file /data/mysql_data/10-8-20-62.lower-test

  3. 160902 15:25:41 [Warning] Can't create test file /data/mysql_data/10-8-20-62.lower-test

  4. ERROR: 1005  Can't create table 'db' (errno: 13)

  5. 160902 15:25:41 [ERROR] Aborting


  6. 160902 15:25:41 [Note] /usr/sbin/mysqld: Shutdown complete


  7. Installation of system tables failed!  Examine the logs in

  8. /data/mysql_data for more information.

給/data/mysql_data加了對(duì)應(yīng)的權(quán)限,再一次執(zhí)行,報(bào)同樣錯(cuò)。


于是干脆直接將/var/lib/mysql整個(gè)文件夾遷移到/data/mysql_data下,再啟動(dòng)服務(wù):
cp過去之后,修改/etc/mysql/my.cnf中的datadir位置,然后mysqld_safe啟動(dòng),發(fā)現(xiàn)不能啟動(dòng):

  1. mysqld_safe mysqld from pid file /data/mysql_data/mysqld.pid ended


查看錯(cuò)誤日志發(fā)現(xiàn)報(bào)錯(cuò)找不到mysql schema下的plugin.frm文件:

  1. 160902 15:26:51 [Note] Plugin 'FEDERATED' is disabled.

  2. /usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)

  3. 160902 15:26:51 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.



再次確認(rèn)目錄及文件的權(quán)限,然后確認(rèn)文件的存在之后,啟動(dòng)依然失敗,報(bào)錯(cuò)不變。



【解決方案】:
然后想到Ubuntu和CentOS文件安全策略可能有一些不一樣,然后查到了這樣的東西:(P.S. 公司DB server都是部署在CentOS上的,這次安在Ubuntu是特例)

Ubuntu下默認(rèn)安裝了并存在一個(gè)AppArmor的服務(wù),這個(gè)服務(wù)是用于訪問控制的。
在以apt-get安裝mysql時(shí),個(gè)人猜測可能在AppArmor的配置中限制了訪問限制——
導(dǎo)致mysqld_safe與mysqld進(jìn)程無法讀寫新移植的datadir目錄中的文件,也同樣導(dǎo)致了mysql_install_db無法在對(duì)應(yīng)的mysql schema下創(chuàng)建文件。

解決方法很簡單,通過編輯器打開此文件,并重新讓AppArmor加載最新的配置即可:

  1. vi /etc/apparmor.d/usr.sbin.mysqld


在該usr.sbin.mysqld配置文件中,注釋掉部分目錄(這些目錄是my.cnf中做了修改的):
因?yàn)槲以趍y.cnf中修改了pid-file、socket、datadir、log_error,所以我對(duì)應(yīng)注釋掉了這些目錄:

  1. #/var/log/mysql.log rw,

  2. #/var/log/mysql.err rw,

  3. #/var/lib/mysql/ r,

  4. #/var/lib/mysql/** rwk,

  5. #/var/log/mysql/ r,

  6. #/var/log/mysql/* rw,

  7. #/var/run/mysqld/mysqld.pid rw,

  8. #/var/run/mysqld/mysqld.sock w,

  9. #/run/mysqld/mysqld.pid rw,

當(dāng)然,也可以簡單直接刪掉這些。

并緊接著在其下添加新的datadir目錄(注意以逗號(hào)做結(jié)束符)

  1. /data/mysql_data rw,


最后讓AppArmor重新加載:

  1. # /etc/init.d/apparmor reload

  2. * Reloading AppArmor profiles

  3. Skipping profile in /etc/apparmor.d/disable: usr.sbin.rsyslogd

  4. ...done.


再次啟動(dòng)mysqld即可成功。(當(dāng)然重新初始化mysql_install_db也是可以的了)

P.S. 當(dāng)然也可以粗暴地直接停掉apparmor服務(wù)。

看完上述內(nèi)容,你們掌握AppArmor導(dǎo)致datadir遷移無法啟動(dòng)或初始化失敗該怎么辦的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI