Я с удовольствием работал над проектом ddev, и я поднял его сегодня, и он говорит, что «служба БД остановлена», и это не похоже на исправление. ddev также сказал, что «время проверки работоспособности службы БД истекло»
В моем проекте ddev говорится, что служба БД остановлена, и я не могу запустить ее. Время проверки работоспособности службы БД истекло.
Ответы (2)
Мне часто приходится закрывать и открывать Docker при переключении проектов, и я вряд ли смогу перейти на каждый из 60+ сайтов, которыми я управляю, чтобы ddev stop
их все перед выходом из приложения Docker.
Возможно ли иметь ddev stop all
или аналогичную команду, которая подходила бы для остановки всех экземпляров ddev перед выходом из Docker?
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
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 значительно улучшила это.