Questo messaggio di errore viene visualizzato quando utilizzo ubuntu 16.04 e l'ultimo mysql 5.7.19-0ubuntu0.16.04.1 in un'immagine Docker.
Cosa si potrebbe fare per risolvere questo problema?
Per riprodurre l'errore
Ottieni il
Dockerfile:FROM ubuntu:16.04 RUN apt update RUN DEBIAN_FRONTEND=noninteractive apt install -y mysql-server(disponibile anche qui )
Costruisci ed esegui:
docker build -t mysqlfail . docker run -it mysqlfail tail -1 /var/log/mysql/error.logsarebbe stato mostrato il seguente registro degli errori:
2017-08-26T11: 48: 45.398445Z 1 [Warning] root @ localhost viene creato con una password vuota! Si prega di considerare di disattivare l'opzione --initialize-insecure.
Che era esattamente quello che volevamo: un mysql senza la password di root ancora impostata.
In passato (ubuntu 14.04 / mysql 5.5)
service mysql startera possibile. Ora se provi questo, falliscedocker run -it mysqlfail service mysql start * Starting MySQL database server mysqld No directory, logging in with HOME=/ [fail]e
/var/log/mysql/error.logcontiene una riga:2017-08-26T11: 59: 57.680618Z 0 [ERRORE] Errore irreversibile: impossibile aprire e bloccare le tabelle dei privilegi: il motore di archiviazione delle tabelle per 'utente' non ha questa opzione
build log (per il completo 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
strana continuazione
Dopo gli esperimenti come indicato nel mio tentativo di risposta , ho creato uno script di shell che esegue un
select count(*)
query su ogni tabella nello spazio mysql tre volte di seguito (perché gli esperimenti mostrano che su alcune tabelle la query fallirà esattamente due volte :-().
Poi un
mysql_upgrade
e il
service mysql restart
è provato. Nello Dockerfilescript è reso disponibile tramite
COPY mysqltest.sh .
Le prove con questo script danno risultati strani / folli.
Per l'
Docker environmentinizio ancora fallisce[ERRORE] Errore irreversibile: impossibile aprire e bloccare le tabelle dei privilegi: il motore di archiviazione delle tabelle per "utente" non ha questa opzione
Esecuzione dello script
sh mysqltest.sh rootnei
docker environmentcavi di2017-08-27T09: 12: 47.021528Z 12 [ERRORE] / usr / sbin / mysqld: la tabella './mysql/db' è contrassegnata come
bloccata e deve essere riparata 2017-08-27T09: 12: 47.050141Z 12 [ERRORE ] Impossibile riparare la tabella: mysql.db
27-08-2017T09: 12: 47.055925Z 13 [ERRORE] / usr / sbin / mysqld: La tabella './mysql/db' è contrassegnata come
bloccata e deve essere riparata 2017-08-2017 -27T09: 12: 47.407700Z 54 [ERRORE] / usr / sbin / mysqld: la tabella './mysql/proc' è contrassegnata come
bloccata e deve essere riparata 2017-08-27T09: 12: 47.433516Z 54 [ERRORE] Impossibile " tabella di riparazione t: mysql.proc
27-08-2017T09: 12: 47.440695Z 55 [ERRORE] / usr / sbin / mysqld: la tabella './mysql/proc' è contrassegnata come
bloccata e deve essere riparata 27-08-2017T09: 12: 47.769485Z 81 [ERRORE] / usr / sbin / mysqld: Tabella './mysql/tables_priv'è contrassegnato come crash e deve essere riparato
2017-08-27T09: 12: 47.792061Z 81 [ERRORE] Impossibile riparare la tabella: mysql.tables_priv
2017-08-27T09: 12: 47.798472Z 82 [ERRORE] / usr / sbin / mysqld: Table './mysql/ tables_priv 'è contrassegnato come crash e deve essere riparato
2017-08-27T09: 12: 47.893741Z 99 [ERROR] / usr / sbin / mysqld: La tabella' ./mysql/user 'è contrassegnata come crash e dovrebbe essere riparata
2017-08 -27T09: 12: 47.914288Z 99 [ERRORE] Impossibile riparare la tabella: mysql.user
2017-08-27T09: 12: 47.920459Z 100 [ERRORE] / usr / sbin / mysqld: Tabella './mysql/user' è contrassegnato come crash e dovrebbe essere riparato
Cosa sta succedendo qui per causare questo strano comportamento?