Це повідомлення про помилку з’являється, коли я використовую ubuntu 16.04 та останню mysql 5.7.19-0ubuntu0.16.04.1 у зображенні Docker.
Що можна зробити, щоб це виправити?
Відтворити помилку
Отримайте
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 створений з порожнім паролем! Подумайте про вимкнення опції - ініціалізувати незахищеність.
Що було саме те, що ми хотіли: mysql ще не встановлений пароль root.
Раніше (ubuntu 14.04 / mysql 5.5) a
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-25
журнал складання (для повного 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
дивне продовження
Після експериментів, як було описано у моїй спробі відповіді , я створив сценарій оболонки, який робить a
select count(*)
запит на кожну таблицю в просторі mysql три рази поспіль (адже експерименти показують, що в деяких таблицях запит вийде з ладу рівно двічі :-().
Тоді а
mysql_upgrade
і
service mysql restart
судимо. У Dockerfile
сценарії доступно через
COPY mysqltest.sh .
Випробування з цим сценарієм дають дивні / шалені результати.
Для
Docker environment
початку все-таки не вдається[ПОМИЛКА] Фатальна помилка: не вдається відкрити та заблокувати таблиці привілеїв: у механізмі зберігання таблиць для "користувача" немає цієї опції
Запуск сценарію
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 [ПОМИЛКА] Не може бути ' 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/ table_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' є позначено як аварія та має бути відремонтовано
Що тут відбувається, щоб викликати цю дивну поведінку?