如何为Laravel Sail,Docker上的每个租户创建新数据库

lyfkaqu1  于 2023-01-04  发布在  Docker
关注(0)|答案(4)|浏览(163)

我第一次在Docker和WSL 2上使用Laravel 8、Tenancy For Laravel开发多租户应用程序。当我尝试创建租户时出现问题。我想为每个租户创建一个新数据库,但创建数据库时出现以下错误:

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 exept的一部分,phpmyadmin是包括:

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

lb3vh1jj1#

我今天遇到了同样的问题。
问题似乎出在.env文件中设置的db用户'sail'。它没有创建数据库所需的权限。
使用sail mysql命令打开mysql控制台,并尝试使用CREATE DATABASE test;创建数据库,会导致相同的错误。
将.env文件中的参数更改为:

DB_USERNAME=root

并且重建Docker容器导致Docker创建日志中的错误,因此MySQL根本不运行。
以root用户身份登录docker mysql并尝试为“sail”用户设置新权限也无济于事。
最后对我起作用的是用标准构建应用程序

DB_USERNAME=sail

使用sail up -d启动应用程序,然后将.env文件更改为

DB_USERNAME=root

之后,我用sail artisan config:clear重置配置。

pokxtpni

pokxtpni2#

遇到了同样的问题,我的工作是创建一个init.sql文件

GRANT ALL PRIVILEGES ON *.* TO 'sail'@'%';
FLUSH PRIVILEGES;

并将以下内容添加到mysql条目中:

volumes:
            - ./path/to/init.sql:/docker-entrypoint-initdb.d/init.sql
myzjeezk

myzjeezk3#

对我有效的方法:
我有PhpMyAdmin安装在我的容器,我可以登录到它使用,

server: mysql
username: root
password: secret

成功登录后,我导航到User Accounts页面,选择sail并授予所有适合我的工作和保存的权限。
这将解决SQLSTATE[HY000] [1045] Access denied的问题

mutmk8jj

mutmk8jj4#

很久以前我就问过这个问题。我已经停止了那个项目。现在,我开始了一个新的项目,面临着同样的问题。我在寻找解决方案的过程中遇到了我自己的问题。我找到了它,它是:
您应该在终端上执行以下命令:

docker-compose exec mysql bash
mysql -u root -p
password: password
GRANT ALL PRIVILEGES ON *.* TO 'sail'@'%';
FLUSH PRIVILEGES;
EXIT;
exit

相关问题