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

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


person rfay    schedule 11.04.2018    source источник
comment
Мне любопытно, почему вы сделали что-то подобное? Почему бы просто не иметь 2 полностью разделенных сайта? Такого оформления я еще не видел...   -  person MilanG    schedule 13.04.2018
comment
Да, я бы точно не стал, я думал, что мультисайт для Drupal был плохой идеей, так как в первый раз я попытался обновить один сайт мультисайта и обнаружил, что это сломало все остальные. Но люди просят об этом. Однако есть совершенно веские (другие) причины иметь дополнительную базу данных: некоторые нетривиальные сайты содержат данные, специфичные для приложений, в отдельной базе данных (и это хорошая идея).   -  person rfay    schedule 14.04.2018
comment
Я поддерживаю около 3 сайтов, на которых они делятся только некоторыми файлами (загруженными администратором / пользователем), и, кроме экономии места (2 из них созданы из исходного), я никогда не видел никакой пользы от такой настройки ... Только проблемы.   -  person MilanG    schedule 16.04.2018
comment
Это то, что я на самом деле тоже искал. У меня есть несколько сайтов, использующих одну базу кода, но разные БД/конфигурации. Наличие нескольких баз данных для каждой позволило бы мне сосредоточиться только на моем settings.php для сопоставления моих БД.   -  person sivuyile    schedule 08.04.2021
comment
Проекты могут взаимодействовать с базами данных друг друга. См. часто задаваемые вопросы, ddev.readthedocs.io/en/stable/users/faq - Могут ли разные проекты общаться друг с другом   -  person rfay    schedule 12.04.2021


Ответы (2)


Обновлено 2 июня 2020 г.: в последних версиях ddev вы можете импортировать дополнительные базы данных напрямую с помощью 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
person rfay    schedule 11.04.2018

В дополнение к ответу 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

person Ignacio Sánchez    schedule 02.06.2020
comment
Вам не нужно выполнять CREATE или GRANT , это делается с помощью ddev import-db --target-db=second_db Но вы можете сделать import-db в качестве постстартового хука. Сценарий import-if-empty в ddev-contrib также был бы хорош здесь, github.com/drud/ddev-contrib/tree/master/hook-examples/ - person rfay; 02.06.2020
comment
Хорошо знать. Спасибо! - person Ignacio Sánchez; 03.06.2020