Ten komunikat o błędzie pojawia się, gdy używam Ubuntu 16.04 i najnowszego mysql 5.7.19-0ubuntu0.16.04.1 na obrazie Docker.
Co można zrobić, aby to naprawić?
Aby odtworzyć błąd
Uzyskaj
Dockerfile
:FROM ubuntu:16.04 RUN apt update RUN DEBIAN_FRONTEND=noninteractive apt install -y mysql-server
(dostępny również tutaj )
Zbuduj i uruchom:
docker build -t mysqlfail . docker run -it mysqlfail tail -1 /var/log/mysql/error.log
wyświetliłby się następujący dziennik błędów:
2017-08-26T11: 48: 45.398445Z 1 [Ostrzeżenie] root @ localhost jest tworzony z pustym hasłem! Rozważ wyłączenie opcji --initialize-niepewne.
Właśnie tego chcieliśmy: mysql bez ustawionego hasła roota.
W przeszłości (ubuntu 14.04 / mysql 5.5)
service mysql start
było możliwe. Teraz, jeśli spróbujesz tego, nie powiedzie siędocker run -it mysqlfail service mysql start * Starting MySQL database server mysqld No directory, logging in with HOME=/ [fail]
i
/var/log/mysql/error.log
zawiera wiersz:2017-08-26T11: 59: 57.680618Z 0 [BŁĄD] Błąd krytyczny: Nie można otworzyć i zablokować tabel uprawnień: Mechanizm przechowywania tabel dla „użytkownika” nie ma tej opcji
dziennik kompilacji (dla kompletu 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
dziwna kontynuacja
Po eksperymentach opisanych w mojej próbie odpowiedzi utworzyłem skrypt powłoki, który wykonuje polecenie
select count(*)
zapytanie do każdej tabeli w przestrzeni mysql trzy razy z rzędu (ponieważ eksperymenty pokazują, że w niektórych tabelach zapytanie nie powiedzie się dokładnie dwa razy :-().
Następnie
mysql_upgrade
i
service mysql restart
jest próbowany. W Dockerfile
skrypcie jest udostępniany za pośrednictwem
COPY mysqltest.sh .
Próby z tym skryptem dają dziwne / szalone wyniki.
Ponieważ
Docker environment
start wciąż się nie udaje[BŁĄD] Błąd krytyczny: Nie można otworzyć i zablokować tabel uprawnień: Mechanizm przechowywania tabel dla „użytkownika” nie ma tej opcji
Uruchamianie skryptu
sh mysqltest.sh root
w
docker environment
prowadzi do2017-08-27T09: 12: 47.021528Z 12 [BŁĄD] / usr / sbin / mysqld: Tabela „./mysql/db” jest oznaczony jako uszkodzony i powinien zostać naprawiony
2017-08-27T09: 12: 47.050141Z 12 [BŁĄD ] Nie można naprawić tabeli: mysql.db
2017-08-27T09: 12: 47.055925Z 13 [BŁĄD] / usr / sbin / mysqld: Tabela „./mysql/db” jest oznaczona jako
rozbita i powinna zostać naprawiona 2017-08 -27T09: 12: 47.407700Z 54 [ERROR] / usr / sbin / mysqld: Table './mysql/proc' jest oznaczony jako rozbity i powinien zostać naprawiony
2017-08-27T09: 12: 47.433516Z 54 [ERROR] Couldn ' Tabela naprawy: mysql.proc
2017-08-27T09: 12: 47.440695Z 55 [BŁĄD] / usr / sbin / mysqld: Tabela „./mysql/proc” jest oznaczona jako
rozbita i powinna zostać naprawiona 2017-08-27T09: 12: 47.769485Z 81 [BŁĄD] / usr / sbin / mysqld: Table './mysql/tables_priv'jest oznaczony jako rozbity i powinien zostać naprawiony
2017-08-27T09: 12: 47.792061Z 81 [BŁĄD] Nie można naprawić tabeli: mysql.tables_priv
2017-08-27T09: 12: 47.798472Z 82 [BŁĄD] / usr / sbin / mysqld: Table './mysql/ table_priv ”jest oznaczony jako rozbity i powinien zostać naprawiony
2017-08-27T09: 12: 47.893741Z 99 [ERROR] / usr / sbin / mysqld: Table './mysql/user' jest oznaczony jako rozbity i powinien zostać naprawiony
2017-08 -27T09: 12: 47.914288Z 99 [BŁĄD] Nie można naprawić tabeli: mysql.user
2017-08-27T09: 12: 47.920459Z 100 [BŁĄD] / usr / sbin / mysqld: Tabela „./mysql/user” to oznaczony jako rozbity i powinien zostać naprawiony
Co się tutaj dzieje, aby spowodować to dziwne zachowanie?