PHP升级至8.2后Cloud SQL PDO连接失败,报MY-010914错误
解决PHP 8.2升级后PDO连接Cloud SQL出现Bad handshake错误
问题描述
升级PHP至8.2版本后,使用PDO连接Cloud SQL(仅允许客户端证书+SSL加密连接)时,突然抛出错误:
[MY-010914] [Server] Bad handshake
连接代码未做修改,重新生成SQL证书后问题仍未解决,相关代码如下:
$this->connection = new PDO("mysql:host=$servername;dbname=$database", self::USERNAME, self::PASSWORD, [ PDO::MYSQL_ATTR_SSL_KEY => $ck, PDO::MYSQL_ATTR_SSL_CERT => $cc, PDO::MYSQL_ATTR_SSL_CA => $sc, PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ]);
可能的解决方法
- 显式指定兼容的SSL加密套件
PHP 8.2调整了MySQL SSL连接的默认加密套件,而Cloud SQL对加密套件有特定要求。在PDO选项中添加指定兼容的cipher:
$this->connection = new PDO("mysql:host=$servername;dbname=$database", self::USERNAME, self::PASSWORD, [ PDO::MYSQL_ATTR_SSL_KEY => $ck, PDO::MYSQL_ATTR_SSL_CERT => $cc, PDO::MYSQL_ATTR_SSL_CA => $sc, PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false, PDO::MYSQL_ATTR_SSL_CIPHER => 'ECDHE-RSA-AES256-GCM-SHA384', // 或Cloud SQL推荐的其他套件 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ]);
可根据Cloud SQL实例的数据库版本调整cipher,比如DHE-RSA-AES256-SHA也是常见兼容选项。
- 验证证书文件的权限与路径
PHP 8.2对文件权限的检查更严格,确保SSL证书文件(私钥、客户端证书、CA证书)的路径正确,且PHP进程拥有读取权限(建议设置为644)。可以在连接前先验证:
// 检查证书文件是否存在且可读 $certFiles = [$ck, $cc, $sc]; foreach ($certFiles as $file) { if (!file_exists($file) || !is_readable($file)) { throw new Exception("无法访问SSL文件: $file"); } }
- 强制使用TLS 1.2或更高版本
Cloud SQL可能不再支持旧版TLS协议,显式指定TLS版本确保兼容性:
$this->connection = new PDO("mysql:host=$servername;dbname=$database", self::USERNAME, self::PASSWORD, [ PDO::MYSQL_ATTR_SSL_KEY => $ck, PDO::MYSQL_ATTR_SSL_CERT => $cc, PDO::MYSQL_ATTR_SSL_CA => $sc, PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false, PDO::MYSQL_ATTR_SSL_OPTIONS => [ 'ssl_mode' => 'REQUIRED', 'tls_version' => 'TLSv1.2' ], PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ]);
注意此选项依赖MySQLnd驱动,确认PHP 8.2已安装该驱动。
检查Cloud SQL实例配置
- 确认实例的SSL功能处于启用状态,客户端证书已正确绑定到该实例;
- 检查数据库版本是否与PHP 8.2兼容(建议使用MySQL 5.7及以上版本);
- 验证网络连接:如果使用私有IP,确保服务器与Cloud SQL实例的网络互通,无防火墙拦截3306端口。
完善PDO连接字符串
在连接字符串中显式指定端口(默认3306),避免端口解析问题:
"mysql:host=$servername;port=3306;dbname=$database"
内容的提问来源于stack exchange,提问作者K Kataria
相关产品推荐
相关产品推荐

