В моем проекте ddev говорится, что служба БД остановлена, и я не могу запустить ее. Время проверки работоспособности службы БД истекло.

Я с удовольствием работал над проектом ddev, и я поднял его сегодня, и он говорит, что «служба БД остановлена», и это не похоже на исправление. ddev также сказал, что «время проверки работоспособности службы БД истекло»

служба БД остановлена


person rfay    schedule 04.04.2018    source источник


Ответы (2)


Мне часто приходится закрывать и открывать Docker при переключении проектов, и я вряд ли смогу перейти на каждый из 60+ сайтов, которыми я управляю, чтобы ddev stop их все перед выходом из приложения Docker.

Возможно ли иметь ddev stop all или аналогичную команду, которая подходила бы для остановки всех экземпляров ddev перед выходом из Docker?

person jenlampton    schedule 28.06.2018
comment
Во-первых, я не рекомендую запускать более 4-5 проектов одновременно из-за проблем с ресурсами докера. Во-вторых, ddev list покажет вам запущенные проекты, вам нужно только получить к ним доступ, и вы можете получить к ним доступ по имени. Таким образом, ddev rm proj1; ddev rm proj2; ddev rm proj3 будет работать (хотя я также хочу использовать ddev rm все, что вы предлагаете). Нам определенно нужны все команды, для которых уместно использовать несколько имен проектов или все, вы можете сделать запрос функции в github.com/drud/ddev/issues/new/choose. - person rfay; 28.06.2018
comment
Не могли бы вы сказать, почему вы должны закрывать и открывать докер при переключении проектов? - person rfay; 28.06.2018
comment
В последних версиях ddev есть ddev rm -a, который я постоянно использую для подобных вещей. Настоятельно рекомендуется, и это отличный способ закрыть все ваши сайты. (Ни одна база данных не пострадала.) - person rfay; 18.11.2018

В Docker для Mac (и, я думаю, в Docker для Windows) docker не дает контейнерам возможности корректно завершить работу при завершении работы. Таким образом, сервер MariaDB в контейнере базы данных не получает возможности очиститься, а нетривиальные базы данных остаются сломанными для следующего запуска (похоже, это не вредит крошечным базам данных). Поэтому, если вы обновляете докер, выключаете хост-компьютер или просто выходите из докера, было бы разумно сначала выполнить ddev stop или ddev remove. (Обратите внимание, что простой ddev remove не выбрасывает вашу базу данных, она будет там для вас, когда вы начнете снова.)

Также обратите внимание, что в выпусках до ddev v0.17.0 сама команда ddev remove имела эту проблему: она могла повредить базу данных, не дав достаточно времени для очистки контейнера базы данных перед его уничтожением.

Я не думаю, что это затронет пользователей Linux, и не уверен насчет Windows.

TLDR;

  • Убедитесь, что вы используете ddev не ниже версии 1.0.0 (и ваши контейнеры отражают это). Это поведение было значительно улучшено в v1.0.0.
  • Удалите существующую поврежденную базу данных с помощью ddev remove --remove-data (а после ddev start повторно импортируйте базу данных или выполните повторную установку)
  • Используйте текущую версию ddev и следуйте инструкциям по обновлению, которые в настоящее время требуют удаления docker-compose. .yaml и отредактируйте файл config.yaml для каждого проекта.
  • Не позволяйте докеру обновляться или выходить из него, а также избегайте перезагрузки хоста, не останавливая и не ddev remove выполняя проекты. Открытая проблема для этого: https://github.com/drud/ddev/issues/748 но это действительно нужно исправить в docker-for-mac, docker-for-windows.

Второй способ сделать это: пользовательская конфигурация mysql в проекте. Перед отладкой удалите любую конфигурацию в .ddev/mysql, если она является причиной вашей проблемы, а затем ddev restart.

Если ваша база данных повреждена, вы можете восстановить ее, добавив в проект файл с именем .ddev/mysql/recovery.cnf и ddev start:

[mysqld]
innodb_force_recovery = 1

После восстановления удалите файл .ddev/mysql/recovery.cnf. Не гарантируется, что ваша база данных не будет повреждена, даже если все будет в порядке.

[Edit 2018-05-16]: Третья причина — недостаточные ресурсы докера. Если вы запускаете несколько проектов или выполняете другие действия с докером, вам нужно увеличить доступную память с 2 ГБ по умолчанию.

[Edit 2018-06-27]: Добавлены инструкции по возможности восстановления.

[Редактировать 2018-08-02]: упоминается, что версия 1.0.0 ddev значительно улучшила это.

person rfay    schedule 04.04.2018
comment
Обновлен ответ, напоминающий людям об удалении пользовательской конфигурации mysql при отладке. - person rfay; 04.05.2018