Laravel连接Azure MySQL执行migrate报错SQLSTATE[HY000] [2002]求助
解决Laravel连接Azure MySQL时
php artisan migrate报错的问题 以下是针对你的问题的具体排查和解决步骤:
清除配置缓存
Laravel会缓存配置文件,如果你修改了.env或数据库配置但未清除缓存,migrate命令可能仍在使用旧配置。执行以下命令清除缓存:php artisan config:clear php artisan cache:clear之后再尝试运行
php artisan migrate。完善数据库配置文件的SSL参数
打开config/database.php,确保MySQL连接的SSL配置完整且正确,特别是添加服务器证书验证关闭参数(Azure MySQL环境下常需要此设置):'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST'), 'port' => env('DB_PORT'), 'database' => env('DB_DATABASE'), 'username' => env('DB_USERNAME'), 'password' => env('DB_PASSWORD'), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), // 关闭服务器证书验证,适配Azure MySQL环境 PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false, ]) : [], ],保存后再次尝试迁移命令。
验证容器内SSL证书的路径与权限
确保Docker容器内的SSL CA证书路径正确,且Laravel运行用户拥有读取权限。执行以下命令检查:# 替换为你的证书实际路径 ls -l /path/to/your/DigiCertGlobalRootCA.crt.pem如果文件不存在,检查挂载或复制证书的步骤是否正确;如果权限不足,执行:
chmod 644 /path/to/your/DigiCertGlobalRootCA.crt.pem显式指定数据库连接执行迁移
如果你的应用配置了多个数据库连接,可能migrate默认使用了错误的连接,显式指定连接:php artisan migrate --database=mysql排查PDO连接的实际参数
临时在app/Providers/AppServiceProvider.php的boot方法中添加代码,查看迁移时PDO的实际连接参数:use Illuminate\Support\Facades\DB; public function boot() { DB::listen(function ($query) { $config = $query->connection->getConfig(); dd('PDO Options:', $config['options']); }); }执行
php artisan migrate,查看输出的SSL参数是否与你配置的一致,以此确认参数是否正确传递到PDO连接中。
内容的提问来源于stack exchange,提问作者MrPython
相关产品推荐
相关产品推荐

