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

问题描述 投票:0回答:3

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

mysql drupal mariadb multisite ddev
3个回答
43
投票

您可以使用

ddev import-db --target-db=newdb
--file=/path/to/file.sql.gz 直接导入其他数据库。创建的数据库已经有权限等

您还可以手动创建和管理数据库(尽管这几乎不再需要)。数据库服务器的 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 --file=dumpfile.sql
  • 您的普通 Web 用户现在可以访问此备用数据库,并且可以在备用多站点的 settings.php 中使用它。
  • 您还需要为 Drupal 多站点做许多其他事情;有完整的教程https://github.com/drud/ddev-contrib/tree/master/recipes/drupal8-multisite

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


7
投票

除了 rfay 答案之外,上一个链接中使用的技巧正是我想要提出的以及我当前正在使用的:

将此钩子添加到 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


3
投票

我喜欢创建额外的

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 recieps https://github.com/drud/ddev-contrib/blob/master/recipes/drupal8-multisite/dot.ddev/config.multisite.yaml

© www.soinside.com 2019 - 2024. All rights reserved.