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

How To Create A New Database For Each Tenant on Laravel Sail, Docker

我第一次使用 Laravel 8、Tenancy For 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

我 运行 今天遇到了完全相同的问题。

问题似乎是 .env 文件中设置的数据库用户 '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 重置了配置。

运行 遇到同样的问题,对我有用的是创建一个 init.sql 文件

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

并将此添加到 mysql 条目:

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

对我有用的:

我的容器中安装了 PhpMyAdmin,我可以使用

登录它
server: mysql
username: root
password: secret

成功登录后,我导航到 User Accounts 页面,选择 sail 并授予适合我的工作和保存的所有权限。

这将解决 SQLSTATE[HY000] [1045] Access denied

的问题