Isso pode não ser a solução ainda. De qualquer forma, pode apontar outros para uma resposta "adequada"
O log de sessão do docker bash mostra uma sequência de etapas que leva a erros estranhos e, finalmente, é capaz de iniciar o daemon mysql adequadamente no ambiente de encaixe.
Tentar iniciar o daemon nesta sessão falha duas vezes - uma vez devido à tabela mysql.user e uma vez devido à tabela mysql.db. Executar o daemon mysql com o --skip-grant-tables funciona, mas também há problemas com comandos select * de simples nestas tabelas.
Estranhamente fazendo duas consultas simples:
select host,user from mysql.user;
select user from mysql.db
e depois matar o daemon para iniciá-lo corretamente com
service mysql start
parece funcionar. Agora vou tentar automatizar isso como uma solução alternativa. Eu ainda estou procurando por uma solução "adequada" para o problema e alguma pista sobre qual é a razão para esse comportamento estranho.
Dockerfile
#*********************************************************************
#
# Dockerfile for https://serverfault.com/questions/870568/2017-08-26t113924-509100z-0-error-fatal-error-cant-open-and-lock-privilege
#
#*********************************************************************
# Ubuntu image
FROM ubuntu:16.04
#
# Maintained by Wolfgang Fahl / BITPlan GmbH http://www.bitplan.com
#
MAINTAINER Wolfgang Fahl [email protected]
RUN \
export DEBIAN_FRONTEND=noninteractive;apt-get update -y && apt-get install -y \
vim \
mysql-server
RUN mkdir /var/run/mysqld;chown mysql /var/run/mysqld
WORKDIR /var/log/mysql
log de criação
docker build .
Sending build context to Docker daemon 8.704kB
Step 1/5 : FROM ubuntu:16.04
---> ebcd9d4fca80
Step 2/5 : MAINTAINER Wolfgang Fahl [email protected]
---> Using cache
---> b84df9d5de50
Step 3/5 : RUN export DEBIAN_FRONTEND=noninteractive;apt-get update -y && apt-get install -y vim mysql-server
---> Using cache
---> b51bd2bb172c
Step 4/5 : RUN mkdir /var/run/mysqld;chown mysql /var/run/mysqld
---> Using cache
---> 5b7455fede6b
Step 5/5 : WORKDIR /var/log/mysql
---> c4c333e811ab
Removing intermediate container cfc49e460c96
Successfully built c4c333e811ab
log da sessão do bash
docker run -it c4c333e811ab
root@607fa9fe8d98:/var/log/mysql# service mysql start
* Starting MySQL database server mysqld No directory, logging in with HOME=/
[fail]
root@607fa9fe8d98:/var/log/mysql# grep ERROR error.log
2017-08-27T07:56:21.377919Z 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table storage engine for 'user' doesn't have this option
2017-08-27T07:56:21.378149Z 0 [ERROR] Aborting
mysqld_safe --skip-grant-tables&sleep 2;mysql -u root -p=""
select * from mysql.user;
ERROR 1031 (HY000): Table storage engine for 'user' doesn't have this option
select host,user from mysql.user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| localhost | debian-sys-maint |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
4 rows in set (0.00 sec)
show variables like "%locking%";
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| skip_external_locking | ON |
+-----------------------+-------+
1 row in set (0.01 sec)
root@607fa9fe8d98:/var/log/mysql# pgrep -fla mysql
721 /bin/sh /usr/bin/mysqld_safe --skip-grant-tables
1083 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant-tables --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --log-syslog=1 --log-syslog-facility=daemon --log-syslog-tag=
pkill -f mysql
echo "" > error.log
service mysql start
* Starting MySQL database server mysqld No directory, logging in with HOME=/. [fail]
grep ERROR error.log
2017-08-27T08:03:12.918047Z 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table storage engine for 'db' doesn't have this option
2017-08-27T08:03:12.918278Z 0 [ERROR] Aborting
mysqld_safe --skip-grant-tables&sleep 2;mysql -u root -p=""
select * from mysql.db;
ERROR 1031 (HY000): Table storage engine for 'db' doesn't have this option
select user from mysql.db;
+---------------+
| user |
+---------------+
| mysql.session |
| mysql.sys |
+---------------+
2 rows in set (0.00 sec)
echo "" > error.log
root@607fa9fe8d98:/var/log/mysql# service mysql start
* Starting MySQL database server mysqld [ OK ]