中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

AppArmor導致datadir遷移無法啟動或初始化失敗該怎么辦

發布時間:2021-11-16 15:29:21 來源:億速云 閱讀:308 作者:柒染 欄目:MySQL數據庫

AppArmor導致datadir遷移無法啟動或初始化失敗該怎么辦,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

【問題描述】:
行為:通過apt-get在一臺ubuntu的機子上新裝一個mysql做本地日志存儲,
由于默認datadir在/var/lib/mysql下,所以準備重新初始化datadir:

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

報錯如下:

  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加了對應的權限,再一次執行,報同樣錯。


于是干脆直接將/var/lib/mysql整個文件夾遷移到/data/mysql_data下,再啟動服務:
cp過去之后,修改/etc/mysql/my.cnf中的datadir位置,然后mysqld_safe啟動,發現不能啟動:

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


查看錯誤日志發現報錯找不到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.



再次確認目錄及文件的權限,然后確認文件的存在之后,啟動依然失敗,報錯不變。



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

Ubuntu下默認安裝了并存在一個AppArmor的服務,這個服務是用于訪問控制的。
在以apt-get安裝mysql時,個人猜測可能在AppArmor的配置中限制了訪問限制——
導致mysqld_safe與mysqld進程無法讀寫新移植的datadir目錄中的文件,也同樣導致了mysql_install_db無法在對應的mysql schema下創建文件。

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

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


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

  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,

當然,也可以簡單直接刪掉這些。

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

  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.


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

P.S. 當然也可以粗暴地直接停掉apparmor服務。

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南昌县| 达拉特旗| 云林县| 资溪县| 文化| 调兵山市| 正安县| 中山市| 县级市| 邢台县| 华宁县| 临朐县| 昆山市| 德钦县| 交口县| 思茅市| 太原市| 青神县| 通州市| 威海市| 凤山市| 科技| 睢宁县| 岳普湖县| 彩票| 西青区| 彰武县| 克什克腾旗| 长岭县| 莱州市| 安庆市| 长春市| 康乐县| 咸丰县| 宜春市| 句容市| 仙桃市| 三河市| 西昌市| 康保县| 禹城市|