如何在 ddev 中创建和加载第二个数据库?

How can I create and load a second database in ddev?

我有一个 Drupal 多站点,每个站点需要一个数据库,并希望它在 ddev 中 运行,但默认情况下 ddev 只有一个数据库,名为 'db'。如何获得第二个数据库?

您可以使用 ddev import-db --target-db=newdb 直接导入其他数据库。创建的数据库会已经有权限等

您还可以手动创建和管理数据库(尽管这已经很少需要了)。数据库服务器的 root 密码是 'root',所以你可以在那里 mysql -uroot -proot(或使用 ddev mysql -uroot -proot)。

  • ddev mysql -uroot -proot
  • CREATE DATABASE newdb;
  • GRANT ALL ON newdb.* to 'db'@'%' IDENTIFIED BY 'db';
  • 现在,如果您想从数据库转储中加载,ddev import-db --target-db=newdb --src=dumpfile.sql
  • 您的普通网络用户现在可以访问此备用数据库,并且可以在 settings.php 中用于您的备用多站点。
  • 您还需要为 Drupal 多站点做很多其他事情; https://github.com/drud/ddev-contrib/tree/master/recipes/drupal8-multisite
  • 有完整教程

有关数据库管理的更多详细信息,请访问 https://ddev.readthedocs.io/en/latest/users/topics/database_management/

除了rfay的回答,上次link中使用的技巧正是我想提出的,也是我目前正在使用的:

将此挂钩添加到 config.yml 文件

hooks:
  post-start:
  - exec: mysql -uroot -proot -hdb -e "CREATE DATABASE IF NOT EXISTS second_db; GRANT
      ALL ON second_db.* TO 'db'@'%';"

并使用参数 --target-db:

将数据加载到第二个数据库

ddev import-db --target-db=second-db --src=second-db.sql

我喜欢创建额外 config.multisite.yaml 并在其中添加定义的方法:

additional_hostnames:
  - basic
  - umami
hooks:
  post-start:
  - exec: mysql -uroot -proot -e "CREATE DATABASE IF NOT EXISTS basic; GRANT ALL ON basic.* to 'db'@'%';"
    service: db
  - exec: mysql -uroot -proot -e "CREATE DATABASE IF NOT EXISTS umami; GRANT ALL ON umami.* to 'db'@'%';"
    service: db

以上来自ddev-contrib收据https://github.com/drud/ddev-contrib/blob/master/recipes/drupal8-multisite/dot.ddev/config.multisite.yaml