Permissions

apparmor:mysql 權限——最近沒有更改

  • January 28, 2019

更新:我現在知道我的問題是數據庫損壞,但辨別它有點棘手——apparmor 似乎是比它應該的更長時間的原因。

我在第一次發佈時沒有註意到,即使在將 mysql 置於抱怨模式並同時發送 apparmorstopteardown命令之後,我的 syslog 仍然顯示 apparmor 消息……助長了我對保護層的非理性恐懼——仍然不確定這是怎麼發生的。我終於將mysql與apparmor分開了,但它仍然無法鎖定自己的文件。爾格數據庫損壞——當。我的備份在新伺服器上執行良好。

初始文章:

Mysql 伺服器被(我認為)apparmor 阻止,但我無法確定為什麼/如何。我對apparmor不太熟悉。

我知道我不應該解除安裝 apparmor - 至少有兩個原因 - 但我已經使用了足夠的褻瀆(並且給了這個問題太多時間)來不考慮它。希望我只是缺少一些簡單的東西,並會在這裡學習。

故障從今天開始,並且沒有系統更改。MySQL的錯誤日誌感嘆權限

Can't open and lock privilege tables: Table 'servers' is read only

我一直無法找到目前未移動其預設數據庫儲存的有此問題的任何人。我也搬了我的——兩年前。apparmor 配置自 2014/04/21 以來沒有變化

/files/bak/tmp/ rw,
/files/bak/tmp/* rwk,
/files/bak/mysql/ rw,
/files/bak/mysql/** rwk,

我已經驗證了文件系統權限:

# find mysql/ -type d -exec chmod 700 {} \;
# find mysql/ -type f -exec chmod 660 {} \;
# chown -R mysql: mysql 

我重新載入了apparmor,安裝了apparmor-utils,推mysql抱怨

# aa-complain mysql
# apparmor_status
apparmor module is loaded.
5 profiles are loaded.
4 profiles are in enforce mode.
  /sbin/dhclient
  /usr/lib/NetworkManager/nm-dhcp-client.action
  /usr/lib/connman/scripts/dhclient-script
  /usr/sbin/tcpdump
1 profiles are in complain mode.
  /usr/sbin/mysqld
1 processes have profiles defined.
0 processes are in enforce mode.
0 processes are in complain mode.
1 processes are unconfined but have a profile defined.
  /sbin/dhclient (495)

…但查看 syslog 仍然表明 apparmor 在以下情況下阻止了 mysql service mysql start

apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=13899 comm="apparmor_parser"

在我發現 apparmor 問題之前,我嘗試從備份中恢復數據庫,這也因寫權限而失敗:

Can't create/write to file '/files/bak/mysql/dbCooper/wp_cb_contact_form.MYI'

我驗證了文件系統是“rw”(即使上面find -exec無論如何都會失敗):

mount
/dev/xvdf on /files/bak type ext4 (rw,noatime)

我什至嘗試停止 apparmor,但係統日誌can't open and lock privilege tables在此之後仍然顯示:

# service apparmor stop
 [...redacted teardown msg...]
# /etc/init.d/apparmor teardown
 * Unloading AppArmor profiles
# service apparmor status
apparmor module is loaded.
0 profiles are loaded.
0 profiles are in enforce mode.
0 profiles are in complain mode.
0 processes have profiles defined.
0 processes are in enforce mode.
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.

當守護程序崩潰時,mysql是否可以鎖定數據庫文件並且無法解鎖它們?如果是這樣,我將如何清除鎖定?

我目前正在執行我的數據庫

mysqld --skip-grant-tables

…所以我知道執行檔可以執行,並且數據庫至少在某種程度上是有效的(這些站點看起來都很正常)。我錯過了什麼嗎?

謝謝閱讀。

數據庫損壞。

奧卡姆剃刀原則盛行。我將備份移至新伺服器並更新了數據庫位置/apparmor 配置。當我重新啟動一切時,我畏縮了。我花了幾個小時說服自己 AppArmor 是一個極其複雜和困難的野獸,但我的沉默完全是沒有原因的——它在第一次嘗試時就完美地工作了。

當沒有文件損壞時,它的工作原理令人驚訝——應該是蘋果的廣告。

現在,如果我能恢復 WordPress 網站,我的 Web 開發人員在我執行時進行了廣泛更新,--skip-grant-tables但在我意識到原因之前。:-/

引用自:https://unix.stackexchange.com/questions/280900