motomedialab / maxscale-connector
修复通过 MariaDB MaxScale 路由 Laravel 数据库连接时的数据库连接错误
Requires
- php: ^7.3
- illuminate/database: ^7.0|^8.0
- illuminate/support: ^7.0|^8.0
Requires (Dev)
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-09-14 17:00:55 UTC
README
一个简单的包,旨在为现有的 Illuminate\Database\Connectors\MySQLConnector
类提供修复。
当使用 Laravel 连接到 MaxScale 时,将执行 $connection->exec("use {$config['database']};");
命令,这不仅会创建多余的查询,而且在使用 MariaDB MaxScale 时还会触发数据库连接错误。在 MaxScale 日志中,您将看到类似以下错误:
error : (1) Invalid authentication message from backend 'your-backend'. Error code: 1044, Msg : #42000: Access denied for user 'username'@'%' to database '`database_name`'
这种错误的原因是 Laravel 正在尝试使用反引号 ('`database_name`') 与 '`database_name`' 建立连接,而实际上它应该简单地连接到 'database_name'(不带反引号)。
由于数据库名已经在 PDO DSN 中声明(见 PR #34389),因此有问题的代码行实际上是多余的。这个包所做的所有事情就是通过覆盖现有的 MySQL 连接器来删除这些多余的数据库选择。
安装
通过 composer 安装 composer require motomedialab/maxscale-connector
在您的 config/database.php
中,您有两种选择
-
将
database.connections.mysql.driver
配置标志更新为maxscale
-
为 MaxScale 创建一个新的配置
- 复制整个
database.connections.mysql
配置数组 - 将键重命名为
maxscale
- 将驱动标志
database.connections.maxscale.driver
更改为maxscale
- 更新您的
.env
文件以反映此更改,例如DB_CONNECTION=maxscale
- 复制整个
完成上述任一项后,您应该能够通过 Laravel 无问题地连接到您的 MaxScale 实例。
注意
- 虽然这个包是为了解决 Laravel MaxScale 问题而构建的,但该包仍然可以与 MySQL 一起使用,并删除每次加载时执行的额外查询。