我的ddev项目说“db service stopped”,我无法启动“db service health checkd out”

时间:2018-04-04 20:22:30

标签: ddev

我很乐意在ddev项目上工作,今天我提出了它并且它说“数据库服务停止了”它似乎不可修复。 ddev还说“数据库服务健康检查超时”

db service stopped

2 个答案:

答案 0 :(得分:0)

在Docker For Mac上(我认为在Docker for Windows上),docker在关闭时没有给予容器优雅退出的机会。因此,数据库容器中的MariaDB服务器没有机会进行清理,并且下一次启动时非常重要的数据库会被破坏(它似乎不会损害微小的数据库)。因此,如果您要升级docker,关闭主机或退出docker,那么首先选择ddev stopddev remove是明智之举。 (请注意,一个简单的ddev remove不会丢弃你的数据库,当你重新开始它时它会在那里。)

另请注意,在ddev v0.17.0之前的版本中,ddev remove命令本身存在此问题:它可能会破坏数据库,因为在销毁之前不会有足够的时间来清理数据库容器。

我认为这不会影响Linux用户,也不确定Windows。

TLDR;

  • 确保您至少使用ddev的v1.0.0(并且您的容器反映了这一点)。在v1.0.0中,这种行为得到了很大改善。
  • 使用ddev remove --remove-data删除现有已损坏的数据库(在ddev start之后,重新导入数据库或再次安装)
  • 使用ddev的current version,并按照升级说明进行操作,这些说明目前需要删除docker-compose.yaml并在每个项目上编辑config.yaml文件。
  • 避免让docker升级或退出,并避免在不停止或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 您的数据库无法保证完好无损,即使它出现正常。

[编辑2018-05-16]:第三​​个原因是码头资源不足。如果您正在运行一些项目或使用docker进行其他操作,那么您将要从默认的2GB中提升可用内存。

[编辑2018-06-27]:添加了有关恢复可能性的说明。

[编辑2018-08-02]:提到ddev的v1.0.0改进了很多。

答案 1 :(得分:0)

在切换项目时,我经常需要关闭和打开Docker,并且在退出Docker应用之前,我不太可能浏览到我管理的{+ {1}} 60个站点中的每个站点

是否有一个<body> <a href="page1.html" id="optionA">Option A</a> <a href="page2.html" id="optionB">Option B</a> </body> 或类似的命令适用于退出Docker之前停止所有ddev实例?