motomedialab/maxscale-connector

修复通过 MariaDB MaxScale 路由 Laravel 数据库连接时的数据库连接错误

v1.0.2 2020-09-18 11:57 UTC

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 中,您有两种选择

  1. database.connections.mysql.driver 配置标志更新为 maxscale

  2. 为 MaxScale 创建一个新的配置

    1. 复制整个 database.connections.mysql 配置数组
    2. 将键重命名为 maxscale
    3. 将驱动标志 database.connections.maxscale.driver 更改为 maxscale
    4. 更新您的 .env 文件以反映此更改,例如 DB_CONNECTION=maxscale

完成上述任一项后,您应该能够通过 Laravel 无问题地连接到您的 MaxScale 实例。

注意

  • 虽然这个包是为了解决 Laravel MaxScale 问题而构建的,但该包仍然可以与 MySQL 一起使用,并删除每次加载时执行的额外查询。