apparmor:mysql 權限——最近沒有更改
更新:我現在知道我的問題是數據庫損壞,但辨別它有點棘手——apparmor 似乎是比它應該的更長時間的原因。
我在第一次發佈時沒有註意到,即使在將 mysql 置於抱怨模式並同時發送 apparmor
stop
和teardown
命令之後,我的 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
但在我意識到原因之前。:-/