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

rfa*_*fay 3 mysql drupal mariadb multisite ddev

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

rfa*_*fay 11

这不是太难,但我认为此时没有记录,对高级用户来说也是如此.MariaDB容器的root密码是"root",因此您可以mysql -uroot -proot在那里,也可以在主机上执行.假设您的主机上有mysql客户端,您可以这样做:

  • 使用ddev describe获得mysql命令和端口号.
  • 将命令更改为使用username = root,password = root.例如,在我有的测试网站上,mysql --host=127.0.0.1 --port=32841 --user=root --password=root.你的港口会有所不同.
  • CREATE DATABASE newdb;
  • GRANT ALL ON newdb.* to 'db'@'%' IDENTIFIED BY 'db';
  • 现在,如果要从数据库转储加载, mysql --host=127.0.0.1 --port=32841 --user=root --password=root --database=newdb <dumpfile.sql
  • 您的普通Web用户现在可以访问此备用数据库,并且可以在settings.php中用于备用多站点.
  • 请注意,对于多站点,您需要为ddev项目添加额外的additional_hostnames.

或者,您可以使用phpmyadmin(请参阅url ddev describe)来执行此操作,但首先您必须向phpmyadmin使用的"db"用户授予完全权限,然后将出现phpmyadmin中的"Create"按钮.

ddev ssh -s db
mysql 
GRANT ALL ON *.* TO 'db'@'%';
Run Code Online (Sandbox Code Playgroud)

请参阅ddev如何自动创建其他数据库?如何为项目自动创建其他数据库.


Ign*_*hez 6

除了 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'@'%';"
Run Code Online (Sandbox Code Playgroud)

并使用 param 将数据加载到第二个数据库--target-db

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

  • 您不必执行 CREATE 或 GRANT ,这些可以通过 `ddev import-db --target-db=second_db` 完成,但您可以将 import-db 作为启动后挂钩执行。ddev-contrib 中的 import-if-empty 脚本在这里也很好,https://github.com/drud/ddev-contrib/tree/master/hook-examples/import-db-if-empty (2认同)
  • 很高兴知道。谢谢! (2认同)