Как я могу создать и загрузить вторую базу данных в ddev?

У меня есть мультисайт Drupal, для которого требуется одна база данных для каждого сайта, и я хочу, чтобы он работал в ddev, но по умолчанию у ddev есть только одна база данных с именем db. Как я могу получить вторую базу данных?

3 ответа

Решение

Это не слишком сложно, но я думаю, что на данный момент это недокументировано, и определенно для опытных пользователей. Пароль root для контейнера MariaDB - "root", так что вы можете mysql -uroot -proot там, и вы также можете сделать это на хосте. Предполагая, что у вас есть клиент mysql на вашем хосте, вы можете сделать это:

  • использование ddev describe чтобы получить команду mysql и номер порта.
  • Измените команду там, чтобы использовать имя пользователя = root, пароль = 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
  • Ваш обычный веб-пользователь теперь может получить доступ к этому альтернативному db, и его можно использовать в файле settings.php для вашего альтернативного мультисайта.
  • Обратите внимание, что для мультисайтов вам нужно добавить дополнительные Additional_hostnames в ваш проект ddev.

Кроме того, вы можете использовать phpmyadmin (см. URL в ddev describe), чтобы сделать это, но сначала вы должны предоставить полные привилегии пользователю 'db', который использует phpmyadmin, затем появится кнопка "Создать" в phpmyadmin.

ddev ssh -s db
mysql 
GRANT ALL ON *.* TO 'db'@'%';

Смотрите Как ddev может автоматически создавать дополнительные базы данных? для того, как автоматически создать дополнительную базу данных для проекта.

В дополнение к ответу 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 https://github.com/drud/ddev-contrib/blob/master/recipes/drupal8-multisite/dot.ddev/config.multisite.yaml

Другие вопросы по тегам