部署在Kubernetes上的MySQL RSA公钥连接问题求助
解决Azure Databricks写入AKS部署的MySQL时RSA公钥读取失败问题
针对你遇到的java.sql.SQLTransientConnectionException: Could not connect to address=(host=xx.xxx.xxx.xx)(port=3306)(type=master) : Could not read server RSA public key from file : serverRsaPublicKeyFile=public_key.pem错误,可按以下步骤排查解决:
修正配置文件修改方式
你当前用echo >的方式会覆盖之前的配置内容,第二次执行会丢失ssl-key配置,应改用>>追加:echo "ssl-key=/bin/private-key.pem" >> /bin/mysql_config echo "ssl-cert=/bin/public-key.pem" >> /bin/mysql_config同时要确认MySQL实际加载的配置文件路径,执行命令查看默认配置文件位置:
mysqld --help --verbose | grep -A 1 "Default options"确保你修改的是MySQL实际读取的配置文件,而非自定义的无效路径。
修复密钥文件权限与归属
MySQL进程需要具备密钥文件的读取权限,执行以下命令调整:chmod 600 /bin/private-key.pem /bin/public-key.pem chown mysql:mysql /bin/private-key.pem /bin/public-key.pem容器内MySQL通常以
mysql用户运行,权限或归属错误会导致文件无法读取。明确指定RSA公钥路径
在MySQL配置中添加server_rsa_public_key参数,强制指定公钥文件的绝对路径:echo "server_rsa_public_key=/bin/public-key.pem" >> /bin/mysql_config这能避免MySQL自动查找公钥时的路径匹配问题。
重启MySQL服务加载新配置
容器内重启MySQL服务,确保修改后的配置生效:# 若容器使用systemd管理服务 systemctl restart mysqld # 若为直接运行的进程,先终止再重启 ps aux | grep mysqld | grep -v grep | awk '{print $2}' | xargs kill mysqld --defaults-file=/bin/mysql_config &调整Databricks JDBC连接配置
在Databricks的JDBC URL中显式指定SSL相关参数,可直接传入公钥内容(避免路径依赖):# 方式1:指定公钥文件路径(需确保Databricks可访问该路径,容器内场景更推荐方式2) jdbc_url = "jdbc:mysql://xx.xxx.xxx.xx:3306/your_database?useSSL=true&serverRSAPublicKeyFile=/bin/public-key.pem" # 方式2:直接传入公钥字符串(去除PEM头部尾部,换行替换为空格) public_key_content = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..." jdbc_url = f"jdbc:mysql://xx.xxx.xxx.xx:3306/your_database?useSSL=true&serverRSAPublicKey={public_key_content}"
内容的提问来源于stack exchange,提问作者Sergio92
相关产品推荐
相关产品推荐

