Как я могу создать и загрузить вторую базу данных в 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