2016-06-27 42 views
3

我最近在Ubuntu 14.04上安裝了MySQL Server 5.7(通過使用this role進行具體說明)。它開始了罰款,首次安裝時,但是當我試圖重新啓動它,它只是掛起永遠:MySQL服務器5.7不會啓動並且錯誤日誌未被填充

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)也沒有給我什麼。

我在哪裏可以診斷?

+0

這有可能是它無法打開基於權限的日誌,因此數據庫將不會啓動,C​​AN」 T日誌。 –

+0

對日誌和數據目錄的所有權限屬於我的組和用戶mysql – Eli

+0

我有完全相同的問題。你找到了解決方案嗎? – John

回答

6

我也有這個確切的問題,我希望我的解決方案可以解決您的問題。

當我手動安裝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啓動並運行得很好。我的劇本的其餘部分正常完成。

有關的AppArmor和MySQL的詳細信息,該頁面提供了一個討論和替代解決方案: ​​

+0

100%正確。幾個月後,我忘了回答我自己的問題,但你也得出了同樣的答案。感謝您寫出來! – Eli