在Laravel Sail、Docker及WSL2环境下使用Tenancy For Laravel创建租户独立数据库时遭遇1044权限错误求助
解决Laravel Sail + Tenancy For Laravel创建租户数据库权限问题
嘿,我刚踩过这个坑,帮你搞定!这个错误的核心原因很明确:Laravel Sail默认的sail数据库用户没有创建新数据库的权限——你在XAMPP里用的大概率是root或者权限更高的账号,所以能正常创建,但Sail出于安全考虑,默认只给sail用户开放了对默认laravel数据库的操作权限,没有CREATE DATABASE这个关键权限。
下面给你两种靠谱的解决方案:
方案一:给sail用户添加创建数据库的权限
- 先进入MySQL容器:
sail exec mysql bash - 用root账号登录MySQL(默认密码是
password):mysql -u root -p - 执行权限赋予命令:
GRANT CREATE ON *.* TO 'sail'@'%'; FLUSH PRIVILEGES; - 退出MySQL和容器,再尝试创建租户,应该就能顺利执行了。
方案二:让Tenancy使用root用户创建数据库
如果不想给sail用户太高权限,可以让Tenancy在创建数据库阶段临时用root账号,创建完成后再切换回sail操作租户数据:
- 打开
config/tenancy.php配置文件,找到database配置段,修改system部分的数据库账号:'database' => [ 'system' => [ 'connection' => env('DB_CONNECTION', 'mysql'), // 临时改用root账号创建数据库 'username' => 'root', 'password' => 'password', ], 'tenant' => [ 'connection' => 'tenant', // 租户日常操作仍用sail账号 'username' => env('DB_USERNAME', 'sail'), 'password' => env('DB_PASSWORD', 'password'), // ... 其他原有配置 ], ] - 保存配置后,清除Laravel的配置缓存:
sail artisan config:clear - 再尝试创建租户,此时Tenancy会用root账号执行建库操作,权限完全足够。
额外提醒
- 先确认Docker容器里的MySQL服务正常运行,可通过
docker-compose ps查看状态 - WSL2环境下只要Docker Desktop的WSL集成配置正确,网络层面一般不会出问题,重点还是聚焦在数据库权限配置上
内容的提问来源于stack exchange,提问作者Bulent
相关产品推荐
相关产品推荐

