apparmor:mysql 权限——最近没有更改

apparmor:mysql 权限——最近没有更改

更新:我现在知道我的问题是数据库损坏,但识别它有点棘手——apparmor 似乎是原因的时间比应有的时间长。

我在第一次发帖时没有注意到,即使将 mysql 置于抱怨模式并发送 apparmorstopteardown命令后,我的 syslog 仍然显示 apparmor 消息......加剧了我对保护层的非理性恐惧 - 仍然不确定这是如何发生的。我终于把mysql从apparmor中分离出来了,但是它仍然无法锁定自己的文件。因此数据库损坏了——该死。我的备份在新服务器上运行良好。

初始帖子:

Mysql 服务器被 (I思考)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

...所以我知道可执行文件可以运行,并且数据库至少在某种程度上有效(站点都显示正常)。我错过了什么吗?

谢谢阅读。

答案1

数据库损坏。

奥卡姆剃刀占上风。我将备份移动到新服务器并更新了数据库位置/apparmor 配置。当我重新开始一切时,我感到畏缩。我花了几个小时说服自己 AppArmor 是一个极其复杂和困难的野兽,但我的沉默完全是没有原因的——它在第一次尝试时就完美地发挥了作用。

令人惊奇的是它如何正常工作当没有文件损坏时——应该是苹果广告。

现在,如果我能够恢复 WordPress 网站,我的 Web 开发人员会在我运行时进行大量更新--skip-grant-tables,但在我意识到原因是什么之前。 :-/

相关内容