Ce message d'erreur apparaît lorsque j'utilise ubuntu 16.04 et le dernier mysql 5.7.19-0ubuntu0.16.04.1 dans une image Docker.
Que pourrait-on faire pour résoudre ce problème?
Pour reproduire l'erreur
Obtenez le
Dockerfile
:FROM ubuntu:16.04 RUN apt update RUN DEBIAN_FRONTEND=noninteractive apt install -y mysql-server
(également disponible ici )
Construire et exécuter:
docker build -t mysqlfail . docker run -it mysqlfail tail -1 /var/log/mysql/error.log
aurait été montré le journal des erreurs suivant:
2017-08-26T11: 48: 45.398445Z 1 [Avertissement] root @ localhost est créé avec un mot de passe vide! Veuillez envisager de désactiver l'option --initialize-insecure.
C'est exactement ce que nous voulions: un mysql sans mot de passe root défini pour le moment.
Dans le passé (Ubuntu 14.04 / mysql 5.5),
service mysql start
c'était possible. Maintenant, si vous essayez cela, cela échouedocker run -it mysqlfail service mysql start * Starting MySQL database server mysqld No directory, logging in with HOME=/ [fail]
et
/var/log/mysql/error.log
contient une ligne:2017-08-26T11: 59: 57.680618Z 0 [ERREUR] Erreur fatale: impossible d'ouvrir et de verrouiller les tables de privilèges: le moteur de stockage de table pour 'utilisateur' n'a pas cette option
journal de construction (pour l'intégralité 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
suite bizarre
Après les expériences décrites dans ma tentative de réponse , j'ai créé un script shell qui fait un
select count(*)
requête sur chaque table de l'espace mysql trois fois de suite (car les expériences montrent que sur certaines tables, la requête échouera exactement deux fois :-().
Puis un
mysql_upgrade
et le
service mysql restart
est essayé. Dans le Dockerfile
script est mis à disposition via
COPY mysqltest.sh .
Les essais avec ce script donnent des résultats étranges / fous.
Car le
Docker environment
départ échoue encore[ERREUR] Erreur fatale: impossible d'ouvrir et de verrouiller les tables de privilèges: le moteur de stockage de table pour 'utilisateur' n'a pas cette option
Exécution du script
sh mysqltest.sh root
dans les
docker environment
pistes de2017-08-27T09: 12: 47.021528Z 12 [ERREUR] / usr / sbin / mysqld: La table './mysql/db' est marquée comme
plantée et doit être réparée 2017-08-27T09: 12: 47.050141Z 12 [ERREUR ] Impossible de réparer la table: mysql.db
2017-08-27T09: 12: 47.055925Z 13 [ERREUR] / usr / sbin / mysqld: La table './mysql/db' est marquée comme
plantée et doit être réparée 2017-08 -27T09: 12: 47.407700Z 54 [ERREUR] / usr / sbin / mysqld: La table './mysql/proc' est marquée comme
plantée et doit être réparée 2017-08-27T09: 12: 47.433516Z 54 [ERREUR] Ne pouvait pas ' t table de réparation: mysql.proc
2017-08-27T09: 12: 47.440695Z 55 [ERREUR] / usr / sbin / mysqld: La table './mysql/proc' est marquée comme
plantée et doit être réparée 2017-08-27T09: 12: 47.769485Z 81 [ERREUR] / usr / sbin / mysqld: Table './mysql/tables_priv'est marqué comme écrasé et doit être réparé
2017-08-27T09: 12: 47.792061Z 81 [ERREUR] Impossible de réparer la table: mysql.tables_priv
2017-08-27T09: 12: 47.798472Z 82 [ERREUR] / usr / sbin / mysqld: Table './mysql/ tables_priv 'est marqué comme planté et doit être réparé
2017-08-27T09: 12: 47.893741Z 99 [ERREUR] / usr / sbin / mysqld: Le tableau' ./mysql/user 'est marqué comme planté et doit être réparé
2017-08 -27T09: 12: 47.914288Z 99 [ERREUR] Impossible de réparer la table: mysql.user
2017-08-27T09: 12: 47.920459Z 100 [ERREUR] / usr / sbin / mysqld: La table './mysql/user' est marqué comme écrasé et doit être réparé
Que se passe-t-il ici pour provoquer ce comportement étrange?