我最近在Ubuntu 14.04上安裝了MySQL Server 5.7(通過ansible使用this role是具體的).首次安裝時啟動很好,但是當我嘗試重新啟動它時,它會永遠掛起:
sudo service mysql restart
* Stopping MySQL Community Server 5.7.13
* MySQL Community Server 5.7.13 is already stopped
* Re-starting MySQL Community Server 5.7.13
....................................................................................................................................................................................
* MySQL Community Server 5.7.13 did not start. Please check logs for more details.
更糟糕的是,似乎沒有錯誤日志在任何地方填充(我已經檢查了/ var / log / mysql /和/var/log/mysql.err).
以詳細模式運行(sudo /usr/sbin / mysqld –user = mysql –verbose)也沒有給我任何幫助.
我在哪里可以診斷這個?
解決方法:
我也遇到了這個問題,我希望我的解決方案可以解決您的問題.
當我手動安裝MySQL 5.7時它運行正常,但是使用Ansible角色它無法啟動. mysql日志文件沒有任何幫助.檢查/ var / log / syslog但是我從AppArmor發現了很多消息:
Aug 10 18:50:05 vagrant-ubuntu-trusty-64 kernel: [ 4446.790627] type=1400 audit(1470855005.470:40): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/var/log/mysql.err" pid=13991 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=109 ouid=109
AppArmor拒絕訪問/var/log/mysql.err文件,因為它的mysqld策略不允許將文件寫入/ var / log /,只是/ var / log / mysql /. mysql的AppArmor策略位于/etc/apparmor.d/usr.sbin.mysqld.處理日志文件訪問的策略部分顯示:
# Allow log file access
/var/log/mysql/ r,
/var/log/mysql/** rw,
這基本上說AppArmor希望將日志文件寫入/ var / log / mysql而不用/ var / log.因為它看到mysql試圖在策略內部的目錄之外寫入它會讓你失望.有幾個解決方案,包括添加一個新的策略讓mysql寫文件到/ var / log,但我發現最簡單的更新處理日志文件的Ansible變量.
在geerlingguy.mysql角色的默認變量中,設置了兩個日志文件指針:
mysql_slow_query_log_file: /var/log/mysql-slow.log
mysql_log_error: /var/log/mysql.err
我重寫這些默認值并將它們移動到/ var / log / mysql:
mysql_slow_query_log_file: /var/log/mysql/mysql-slow.log
mysql_log_error: /var/log/mysql/mysql.err
現在AppArmor很高興,mysql啟動并運行得很好.我的劇本的其余部分正常完成.
標簽:mysql,ansible
來源: https://codeday.me/bug/20190824/1704098.html