Este mensaje de error aparece cuando uso ubuntu 16.04 y el último mysql 5.7.19-0ubuntu0.16.04.1 en una imagen de Docker.
¿Qué se podría hacer para arreglar esto?
Para reproducir el error
Obtén el
Dockerfile
:FROM ubuntu:16.04 RUN apt update RUN DEBIAN_FRONTEND=noninteractive apt install -y mysql-server
(también disponible aquí )
Construye y ejecuta:
docker build -t mysqlfail . docker run -it mysqlfail tail -1 /var/log/mysql/error.log
se le habría mostrado el siguiente registro de errores:
2017-08-26T11: 48: 45.398445Z 1 [Advertencia] root @ localhost se crea con una contraseña vacía. Considere desactivar la opción --initialize-insecure.
Que era exactamente lo que queríamos: un mysql sin contraseña de root establecida todavía.
En el pasado (ubuntu 14.04 / mysql 5.5) a
service mysql start
era posible. Ahora si intentas esto falladocker run -it mysqlfail service mysql start * Starting MySQL database server mysqld No directory, logging in with HOME=/ [fail]
y
/var/log/mysql/error.log
contiene una línea:2017-08-26T11: 59: 57.680618Z 0 [ERROR] Error grave: no se pueden abrir y bloquear tablas de privilegios: el motor de almacenamiento de tablas para 'usuario' no tiene esta opción
registro de compilación (para el 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
continuación extraña
Después de los experimentos como se describe en mi intento de respuesta , creé un script de shell que hace un
select count(*)
consulta en cada tabla en el espacio mysql tres veces seguidas (porque los experimentos muestran que en algunas tablas la consulta fallará exactamente dos veces :-().
Entonces un
mysql_upgrade
y el
service mysql restart
es probado En el Dockerfile
guión está disponible a través de
COPY mysqltest.sh .
Las pruebas con este script dan resultados extraños / locos.
Para el
Docker environment
comienzo todavía falla[ERROR] Error grave: no se pueden abrir y bloquear tablas de privilegios: el motor de almacenamiento de tablas para 'usuario' no tiene esta opción
Ejecutando el script
sh mysqltest.sh root
en las
docker environment
pistas para2017-08-27T09: 12: 47.021528Z 12 [ERROR] / usr / sbin / mysqld: la tabla './mysql/db' está marcada como
bloqueada y debe repararse 2017-08-27T09: 12: 47.050141Z 12 [ERROR ] No se pudo reparar la tabla: mysql.db
2017-08-27T09: 12: 47.055925Z 13 [ERROR] / usr / sbin / mysqld: la tabla './mysql/db' está marcada como
bloqueada y debe repararse 2017-08 -27T09: 12: 47.407700Z 54 [ERROR] / usr / sbin / mysqld: la tabla './mysql/proc' está marcada como
bloqueada y debe repararse 2017-08-27T09: 12: 47.433516Z 54 [ERROR] no se pudo ' t tabla de reparación: mysql.proc
2017-08-27T09: 12: 47.440695Z 55 [ERROR] / usr / sbin / mysqld: la tabla './mysql/proc' está marcada como
bloqueada y debe repararse 2017-08-27T09: 12: 47.769485Z 81 [ERROR] / usr / sbin / mysqld: Tabla './mysql/tables_priv'está marcado como bloqueado y debe repararse
2017-08-27T09: 12: 47.792061Z 81 [ERROR] No se pudo reparar la tabla: mysql.tables_priv
2017-08-27T09: 12: 47.798472Z 82 [ERROR] / usr / sbin / mysqld: Table './mysql/ tables_priv 'está marcado como bloqueado y debe repararse
2017-08-27T09: 12: 47.893741Z 99 [ERROR] / usr / sbin / mysqld: Table' ./mysql/user 'está marcado como
bloqueado y debe repararse 2017-08 -27T09: 12: 47.914288Z 99 [ERROR] No se pudo reparar la tabla: mysql.user
2017-08-27T09: 12: 47.920459Z 100 [ERROR] / usr / sbin / mysqld: La tabla './mysql/user' es marcado como estrellado y debe repararse
¿Qué está pasando aquí para causar este extraño comportamiento?