#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 из основной базы данных.