RDS 上的 Laravel 5.2 + MySQL 8.0 - 连接错误,显示“SQLSTATE[HY000] [2002]”

问题描述 投票:0回答:1

我有一个在 PHP 5.6 和 Laravel 5.2 上运行的应用程序。它托管在 AWS 中的 AWS Linux 1 EC2 计算机上。此 Web 服务器连接到 RDS MySQL 实例。 RDS 实例已运行 MySQL 5.7 多年。

MySQL 5.7 已于 2023 年底结束生命周期,亚马逊正在逐步取消 RDS 中对 MySQL 5 的标准支持。我本周已按照本指南中规定的预防措施将我的 RDS 实例更新到 MYSQ 8.0。

以下是我所做的事情:

-在我的 Laravel

config/database.php
文件中,我有以下内容:

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE'),
    'username' => env('DB_USERNAME'),
    'password' => env('DB_PASSWORD'),
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
    'strict' => false,
    'engine' => null,
],

-在 RDS 中,我附加了一个具有以下覆盖的参数组:

将上述数据库配置值保存到参数组中后,我确保允许我的 RDS MySQL 实例完成“修改”,然后通过 AWS 控制台重新启动该实例。

-我还确保从 Laravel 应用程序连接的 MySQL 用户具有身份验证插件 mysql_native_password (而不是新插件 caching_sha2_password)。

-我已经测试过,我可以使用通过 MySQL Workbench 向 Laravel 应用程序提供的用户名/密码连接到 RDS MySQL 实例

执行上述步骤后,我收到以下错误:

除了上述配置(与所有 MySQL 5 到 8 升级指南以及我在互联网上看到的所有问题和答案一致)之外,我还尝试过:

-将 RDS 参数组中的所有

character_set_*
值设置为
utf8mb4
(MySQL 8 中的默认字符集),并将参数组中的
collation_*
值设置为
utf8mb4_0900_ai_ci
(MySQL 8 中的默认排序规则)。

-将我的 Laravel 数据库配置设置为:

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE'),
    'username' => env('DB_USERNAME'),
    'password' => env('DB_PASSWORD'),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_0900_ai_ci',
    'prefix' => '',
    'strict' => false,
    'engine' => null,
],

以匹配新的 MySQL 8 字符集和排序规则默认值。

-在每次可能的迭代中混合并匹配上述配置

我无法克服上面发布的

SQLSTATE[HY000] [2002]
错误。

是否有人使用旧版本的 Laravel(最好将 MySQL 实例托管在 RDS 上)经历过相同的 MySQL 5 到 8 升级过程,并且必须解决相同的错误?

mysql laravel laravel-5 amazon-rds mysql-8.0
1个回答
0
投票

可能是 TLS 问题,有关 RDS 如何为实例配置 TLS 证书的一些详细信息此处。您可能需要向应用程序提供数据库 ssl 配置并将 RDS CA 证书添加到服务器。下载 ca 证书的说明可以在此处找到。

下面是一个示例配置,其中 RDS CA 证书位于

database/certs/rds-combined-ca-bundle.pem

    'mysql_ssl' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => false,
        'engine' => null,
        'sslmode' => 'verify_identity',
        'options' => [
            PDO::MYSQL_ATTR_SSL_CA => base_path('database/certs/rds-combined-ca-bundle.pem')
        ],
    ],
© www.soinside.com 2019 - 2024. All rights reserved.