Diese Fehlermeldung wird angezeigt, wenn ich Ubuntu 16.04 und das neueste mysql 5.7.19-0ubuntu0.16.04.1 in einem Docker-Image verwende.
Was könnte getan werden, um dies zu beheben?
Um den Fehler zu reproduzieren
Holen Sie sich das
Dockerfile:FROM ubuntu:16.04 RUN apt update RUN DEBIAN_FRONTEND=noninteractive apt install -y mysql-server(auch hier erhältlich )
Erstellen und ausführen:
docker build -t mysqlfail . docker run -it mysqlfail tail -1 /var/log/mysql/error.loghätte das folgende Fehlerprotokoll angezeigt bekommen:
2017-08-26T11: 48: 45.398445Z 1 [Warnung] root @ localhost wurde mit einem leeren Passwort erstellt! Bitte erwägen Sie, die Option --initialize-insecure auszuschalten.
Welches war genau das, was wir wollten: ein MySQL ohne Root-Passwort noch eingestellt.
In der Vergangenheit (Ubuntu 14.04 / MySQL 5.5) war ein
service mysql startmöglich. Wenn Sie dies versuchen, schlägt dies fehldocker run -it mysqlfail service mysql start * Starting MySQL database server mysqld No directory, logging in with HOME=/ [fail]und
/var/log/mysql/error.logenthält eine Zeile:2017-08-26T11: 59: 57.680618Z 0 [FEHLER] Schwerwiegender Fehler: Berechtigungstabellen können nicht geöffnet und gesperrt werden: Die Tabellenspeicher-Engine für 'Benutzer' verfügt nicht über diese Option
Bauprotokoll (für das komplette Dockerfile)
Sending build context to Docker daemon 2.56kB
Step 1/4 : FROM ubuntu:16.04
---> ebcd9d4fca80
...
Step 4/4 : RUN service mysql start
---> Running in 5b899739d90d
* Starting MySQL database server mysqld
...fail!
The command '/bin/sh -c service mysql start' returned a non-zero code: 1
seltsame Fortsetzung
Nach den in meinem Antwortversuch beschriebenen Experimenten habe ich ein Shell-Skript erstellt, das a
select count(*)
Abfrage für jede Tabelle im MySQL-Bereich dreimal hintereinander (da Experimente zeigen, dass bei einigen Tabellen die Abfrage genau zweimal fehlschlägt :-().
Dann ein
mysql_upgrade
und die
service mysql restart
wird versucht. Im wird das DockerfileSkript über zur Verfügung gestellt
COPY mysqltest.sh .
Die Versuche mit diesem Skript führen zu seltsamen / verrückten Ergebnissen.
Denn
Docker environmentder Start scheitert noch[FEHLER] Schwerwiegender Fehler: Berechtigungstabellen können nicht geöffnet und gesperrt werden: Die Tabellenspeicher-Engine für 'Benutzer' verfügt nicht über diese Option
Ausführen des Skripts
sh mysqltest.sh rootin den
docker environmentführt zu2017-08-27T09: 12: 47.021528Z 12 [FEHLER] / usr / sbin / mysqld: Tabelle './mysql/db' ist als abgestürzt markiert und sollte repariert werden
2017-08-27T09: 12: 47.050141Z 12 [FEHLER ] Tabelle konnte nicht repariert werden: mysql.db
2017-08-27T09: 12: 47.055925Z 13 [FEHLER] / usr / sbin / mysqld: Tabelle './mysql/db' ist als abgestürzt markiert und sollte
2017-08 repariert werden -27T09: 12: 47.407700Z 54 [FEHLER] / usr / sbin / mysqld: Tabelle './mysql/proc' ist als abgestürzt markiert und sollte repariert werden
2017-08-27T09: 12: 47.433516Z 54 [FEHLER] Konnte nicht ' t repair table: mysql.proc
2017-08-27T09: 12: 47.440695Z 55 [FEHLER] / usr / sbin / mysqld: Die Tabelle './mysql/proc' ist als abgestürzt markiert und sollte repariert werden
2017-08-27T09: 12: 47.769485Z 81 [FEHLER] / usr / sbin / mysqld: Tabelle './mysql/tables_priv'ist als abgestürzt markiert und sollte repariert werden
2017-08-27T09: 12: 47.792061Z 81 [FEHLER] Tabelle konnte nicht repariert werden: mysql.tables_priv
2017-08-27T09: 12: 47.798472Z 82 [FEHLER] / usr / sbin / mysqld: Table './mysql/ tables_priv 'ist als abgestürzt markiert und sollte repariert werden
2017-08-27T09: 12: 47.893741Z 99 [FEHLER] / usr / sbin / mysqld: Tabelle' ./mysql/user 'ist als abgestürzt markiert und sollte repariert werden
2017-08 -27T09: 12: 47.914288Z 99 [FEHLER] Tabelle konnte nicht repariert werden: mysql.user
2017-08-27T09: 12: 47.920459Z 100 [FEHLER] / usr / sbin / mysqld: Tabelle './mysql/user' ist markiert als abgestürzt und sollte repariert werden
Was ist hier los, um dieses seltsame Verhalten zu verursachen?