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

Ballerina 持久化运行报错:公钥检索不被允许导致SQL连接器连接池初始化失败

Ballerina 持久化运行报错:公钥检索不被允许导致SQL连接器连接池初始化失败

嗨,我正好碰到过这个问题,来给你捋捋解决办法!

你遇到的这个Public Key Retrieval is not allowed错误,本质是MySQL 8.0及以上版本默认用了更安全的caching_sha2_password身份验证插件,但Ballerina的SQL连接器出于安全考虑,默认禁止了公钥检索操作,导致连接池初始化失败。结合你用Docker部署MySQL的场景,给你两个可行的解决方案:

方案一:修改Ballerina的数据库连接配置

直接在你的Ballerina代码里,给数据库客户端配置加上allowPublicKeyRetrieval=true参数,同时如果不需要SSL连接的话,可以顺便加上useSSL=false避免额外警告。示例代码如下:

import ballerina/sql;
import ballerina/sql.driver.mysql;

sql:Client dbClient = check new (
    host = "localhost",
    port = 3305,
    user = "root",
    password = "my-secret-pw",
    database = "你的数据库名称", // 记得替换成实际的库名
    options = {
        allowPublicKeyRetrieval: true,
        useSSL: false
    }
);

方案二:调整MySQL Docker容器的启动参数

如果你不想改动代码,可以在启动MySQL容器时,指定用旧版的mysql_native_password身份验证插件。不过要注意,得先停掉并删除已有的容器,再重新创建:

# 停止并删除旧容器
docker stop persist-mysql
docker rm persist-mysql

# 用新参数启动容器
docker run -e "MYSQL_ROOT_PASSWORD=my-secret-pw" --name persist-mysql -p 3305:3306 -d mysql --default-authentication-plugin=mysql_native_password

两种方案选一个就行,推荐方案一,因为它不会降低MySQL的默认安全性,只是在连接器层面开启必要的公钥检索权限。

备注:内容来源于stack exchange,提问作者sahanhe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 09:09:52