このエラーメッセージは、Dockerイメージでubuntu 16.04および最新のmysql 5.7.19-0ubuntu0.16.04.1を使用すると表示されます。
これを修正するために何ができますか?
エラーを再現するには
入手
Dockerfile
:FROM ubuntu:16.04 RUN apt update RUN DEBIAN_FRONTEND=noninteractive apt install -y mysql-server
(こちらも利用可能)
ビルドして実行:
docker build -t mysqlfail . docker run -it mysqlfail tail -1 /var/log/mysql/error.log
次のエラーログが表示されます。
2017-08-26T11:48:45.398445Z 1 [警告] root @ localhostは空のパスワードで作成されます!--initialize-insecureオプションのオフを検討してください。
これはまさに私たちが望んだものでした。ルートパスワードがまだ設定されていないmysqlです。
過去(ubuntu 14.04 / mysql 5.5)
service mysql start
は可能でした。これを試すと失敗するdocker run -it mysqlfail service mysql start * Starting MySQL database server mysqld No directory, logging in with HOME=/ [fail]
次の
/var/log/mysql/error.log
行が含まれます。2017-08-26T11:59:57.680618Z 0 [エラー]致命的なエラー:権限テーブルを開いてロックできません: 'user'のテーブルストレージエンジンにはこのオプションがありません
ビルドログ(完全な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
奇妙な継続
私の答えの試みで概説された実験の後、私はシェルスクリプトを作成しました
select count(*)
mysqlスペースの各テーブルで3回連続してクエリを実行します(実験により、一部のテーブルではクエリが2回失敗することが示されているため:-()。
それから
mysql_upgrade
そしてその
service mysql restart
試されます。ではDockerfile
スクリプトが経由して利用できるようになります
COPY mysqltest.sh .
このスクリプトを使用した試行では、奇妙な/クレイジーな結果が得られます。
以下のための
Docker environment
スタートはまだ失敗[エラー]致命的なエラー:特権テーブルを開いてロックできません: 'user'のテーブルストレージエンジンにはこのオプションがありません
スクリプトを実行する
sh mysqltest.sh root
に
docker environment
つながる2017-08-27T09:12:47.021528Z 12 [エラー] / usr / sbin / mysqld:テーブル './mysql/db'はクラッシュとしてマークされ、修復する必要があります
2017-08-27T09:12:47.050141Z 12 [エラー]テーブルを修復できませんでした:mysql.db
2017-08-27T09:12:47.055925Z 13 [エラー] / usr / sbin / mysqld:テーブル './mysql/db'はクラッシュとしてマークされ、修復する必要があります
2017-08 -27T09:12:47.407700Z 54 [エラー] / usr / sbin / mysqld:テーブル './mysql/proc'はクラッシュとしてマークされ、修復する必要があります
2017-08-27T09:12:47.433516Z 54 [エラー] Couldn ' t修復テーブル:mysql.proc
2017-08-27T09:12:47.440695Z 55 [エラー] / usr / sbin / mysqld:テーブル './mysql/proc'はクラッシュとしてマークされ、修復する必要があります
2017-08-27T09: 12:47.769485Z 81 [エラー] / usr / sbin / mysqld:テーブル './mysql/tables_priv'クラッシュしたとマークされており、修復する必要がある
2017-08-27T09:12:47.792061Z 81 [エラー]テーブルを修復できませんでした:mysql.tables_priv
2017-08-27T09:12:47.798472Z 82 [エラー] / usr / sbin / mysqld:テーブル './mysql/ tables_priv 'はクラッシュとしてマークされ、修復する必要があります
2017-08-27T09:12:47.893741Z 99 [エラー] / usr / sbin / mysqld:テーブル' ./mysql/user 'はクラッシュとしてマークされ、修復する必要があります
2017-08 -27T09:12:47.914288Z 99 [エラー]テーブルを修復できませんでした:mysql.user
2017-08-27T09:12:47.920459Z 100 [エラー] / usr / sbin / mysqld:テーブル './mysql/user'はクラッシュしたとしてマークされ、修復する必要があります
この奇妙な動作を引き起こすために、ここで何が起こっていますか?