我有一个 Drupal 多站点,需要为每个站点拥有一个数据库,并希望它在 ddev 中运行,但 ddev 默认情况下只有一个数据库,名为“db”。我怎样才能获得第二个数据库?
您可以使用
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
有关数据库管理的更多详细信息,请访问 https://ddev.readthedocs.io/en/latest/users/usage/database-management/
除了 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
我喜欢创建额外的
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