2016-06-27 4 views
3

Ich habe vor kurzem MySQL Server 5.7 auf Ubuntu 14.04 installiert (durch ansible mit this role, um spezifisch zu sein). Es begann bis gut, wenn zum ersten Mal installiert, aber wenn ich versuche, es neu zu starten, es hängt nur immer:MySQL Server 5.7 wird nicht gestartet und Fehlerprotokoll wird nicht ausgefüllt

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. 

Erschwerend kommt hinzu, keine Fehlerprotokolle überall zu erhalten bevölkerten scheinen (Ich habe überprüft /var/log/mysql/ und /var/log/mysql.err) .

Im ausführlichen Modus ausgeführt (sudo /usr/sbin/mysqld --user=mysql --verbose) gibt mir auch nichts.

Wo kann ich nachsehen, um das zu diagnostizieren?

+0

Es ist möglich, dass es nicht die auf Berechtigungen basierte Protokolle öffnen kann und damit die DB wird nicht gestartet und CAN‘ T log. –

+0

Alle Berechtigungen für Protokolle und Daten gehören zu meiner Gruppe und Benutzer mysql – Eli

+0

Ich habe genau das gleiche Problem. Hast du eine Lösung gefunden? – John

Antwort

6

Ich hatte dieses genaue Problem auch, ich hoffe, dass meine Lösung Ihre Probleme behebt.

Wenn ich MySQL 5.7 manuell installiert habe, lief es korrekt, aber mit der Ansible-Rolle würde es nicht starten. Die mysql-Protokolldateien waren nicht hilfreich. Überprüfen /var/log/syslog jedoch fand ich viele Nachrichten von 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 wurde Zugriff auf die /var/log/mysql.err Datei verweigert, weil seine Politik für mysqld Dateien nicht erlaubt, /var/log/mysql/ nur /var/log/ geschrieben werden. Die AppArmor-Richtlinie für mysql lautet /etc/apparmor.d/usr.sbin.mysqld. Der Abschnitt der Politik, die mit Protokolldateizugriff zeigt Angebote:

# Allow log file access 
    /var/log/mysql/ r, 
    /var/log/mysql/** rw, 

Das sagt im Grunde, dass AppArmor erwartet Logfiles ohne Rückstellungen für /var/log-/var/log/mysql geschrieben werden. Da mysql versucht, außerhalb der Verzeichnisse innerhalb der Richtlinie zu schreiben, wird es beendet. Dazu gibt es mehrere Lösungen, einschließlich einer neuen Richtlinie, mit der mysql Dateien in /var/log schreiben kann, aber ich fand es am einfachsten, die Ansible-Variablen zu aktualisieren, die mit Protokolldateien zu tun haben.

In den Standardgrößen für die geerlingguy.mysql Rolle zwei Protokolldatei Zeiger gesetzt:

mysql_slow_query_log_file: /var/log/mysql-slow.log 
mysql_log_error: /var/log/mysql.err 

ich diese Standardwerte außer Kraft setzen und sie zu /var/log/mysql stattdessen bewegen:

mysql_slow_query_log_file: /var/log/mysql/mysql-slow.log 
mysql_log_error: /var/log/mysql/mysql.err 

Jetzt AppArmor glücklich ist, und mysql startet und läuft gut. Der Rest meines Playbooks wird normal beendet.

Weitere Informationen über AppArmor und MySQL, bietet diese Seite eine Diskussion und alternative Lösungen: https://blogs.oracle.com/jsmyth/entry/apparmor_and_mysql

+0

100% richtig. Ich habe vergessen, meine eigene Frage zu beantworten, nachdem ich vor ein paar Monaten dazu gekommen bin, aber du bist zu der gleichen Antwort wie ich gekommen. Danke, dass du das geschrieben hast! – Eli

Verwandte Themen