Как Создать Новую Базу Данных Для Каждого Клиента в Laravel Sail, Docker

#laravel #docker #multi-tenant #wsl-2 #laravel-sail

Вопрос:

Я впервые разрабатываю мультитенантное приложение, используя Laravel 8, Аренду для Laravel в Docker и WSL2. Моя проблема возникает, когда я пытаюсь создать арендатора. Я хочу создать новую базу данных для каждого арендатора, но при создании базы данных возникает следующая ошибка:

 SQLSTATE[42000]:
Syntax error or access violation:
1044 Access denied for user 'sail'@'%' to database 'tenant-a6d0813b-a546-428d-859a-15095724fb73'
(SQL: CREATE DATABASE `tenant-a6d0813b-a546-428d-859a-15095724fb73` CHARACTER SET `utf8mb4` COLLATE `utf8mb4_unicode_ci`) 
 

Я даже не знаю, с чего мне начать, потому что я довольно новичок в Docker, WLS и Laravel Sail. До того, как я перенес этот проект в Docker, я мог создавать базы данных на Xammp, но больше нет.

файл docker-compose.yml в том виде, в каком он поставляется Laravel, за исключением той части, в которую включен phpmyadmin:

 phpmyadmin:
   image: phpmyadmin
   restart: always
   ports:
       - 8080:80
   environment:
       - PMA_HOST=mysql
   depends_on:
       - mysql
   networks:
       - sail
 

Ответ №1:

Сегодня я столкнулся с точно такой же проблемой.

Проблема, по-видимому, в том, что пользователь бд «парус» установлен в файле .env. У него нет необходимых привилегий для создания базы данных.

Открытие консоли mysql с sail mysql помощью команды и попытка создать базу данных с CREATE DATABASE test; вызывает ту же ошибку.

Изменение параметра в файле .env на:

 DB_USERNAME=root
 

и перестройка контейнера docker вызвала ошибку в журнале создания docker, и, следовательно, mysql вообще не работает.

Вход в docker mysql от имени root и попытка установить новые привилегии для пользователя «sail» также не помогли.

Что в итоге сработало для меня, так это создание приложения со стандартом

 DB_USERNAME=sail
 

запустите приложение с sail up -d помощью, а затем измените файл .env на

 DB_USERNAME=root
 

После этого я сбросил конфигурацию с sail artisan config:clear помощью .

Комментарии:

1. Спасибо за вашу помощь. Ваше предложение устранило ошибку, но когда я проверил базы данных, я не увидел базу данных арендатора. Удалось ли увидеть созданную базу данных?

2. Да, я использовал команды, как описано в конце этой страницы: tenancyforlaravel.com/docs/v3/quickstart Это создало две новые базы данных: tenantfoo и tenantbar. Затем я успешно подключился к обеим новым базам данных с одинаковыми учетными данными root/password из основной базы данных.