You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prisma连接远程MySQL报错:bad handshake问题求助

解决Prisma连接远程MySQL出现Bad Handshake错误的方法

针对你遇到的**命令行能连接远程MySQL,但执行npx prisma db pull时报ERROR 08S01 (1043): Bad handshake**的问题,可按以下步骤排查解决:

1. 确认SSL连接的必要性与参数匹配

  • 你用命令行连接时的命令mysql -usven -h<ip-address> -p未添加SSL参数,说明服务器允许无SSL连接,而Prisma的URL强制开启了SSL配置,可能导致握手不匹配。先尝试移除URL中的SSL参数,改为:
    mysql://sven:<URL-ENCODEDPASSWORD>@<IP-ADDRESS>:3306/portfolio
    
    执行npx prisma db pull测试是否正常。
  • 如果服务器要求必须用SSL连接,重新检查client-identity.p12文件的生成过程:确保将client-key.pem和client-cert.pem正确合并,生成时输入的密码要与URL中sslpassword完全一致,生成命令示例:
    openssl pkcs12 -export -out client-identity.p12 -inkey client-key.pem -in client-cert.pem
    

2. 验证URL编码的数据库密码

确认密码的URL编码是否准确,比如密码包含@、#、/等特殊字符时,必须替换为对应的URL编码(如@→%40),避免因编码错误导致身份验证失败。

3. 检查MySQL服务器的SSL配置

登录远程MySQL服务器,执行以下命令查看SSL状态:

SHOW VARIABLES LIKE '%ssl%';
  • 确认have_ssl值为YES,若require_secure_transport为ON,则必须使用SSL连接;若为OFF,则允许非SSL连接,此时Prisma无需配置SSL参数。
  • 对比服务器端的ca.pem与你本地的ca.pem内容,确保证书完全一致,避免证书不匹配导致握手失败。

4. 更换Prisma的SSL配置方式

尝试放弃sslidentity参数,改用单独的证书文件配置,将URL修改为:

mysql://sven:<URL-ENCODEDPASSWORD>@<IP-ADDRESS>:3306/portfolio?sslkey=client-key.pem&sslcert=client-cert.pem&sslca=ca.pem

确保client-key.pem、client-cert.pem、ca.pem三个文件存放在项目根目录,或指定完整文件路径。

5. 排查网络与防火墙限制

虽然命令行能连接,但仍需确认服务器3306端口对Prisma所在环境开放,可通过telnet <IP-ADDRESS> 3306测试端口连通性,排除防火墙或网络策略拦截的可能。

内容的提问来源于stack exchange,提问作者codingholt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 01:15:34