我正在尝试使用python连接到MySQL数据库,但出现一个奇怪的错误。我可以使用mysql控制台命令中的相同连接值,并且连接没有问题,这一事实使情况更加复杂。

这是我正在使用的确切代码:

导入pymysql
从支票导入AgentCheck

class DelayedJobCheck(AgentCheck):
    def check(self, instance):
        self.log.info("testing connection")
        self.log.info(instance)

        connection = pymysql.connect(**instance)

        cur = cnx.cursor(buffered=True)
        cur.execute("SHOW STATUS LIKE 'Ssl_cipher'")
        print(cur.fetchone())
        cur.close()
        cnx.close()

        self.gauge('hello.world', 1)

这是我得到的错误:

追溯(最近一次通话):
运行中的文件“/opt/datadog-agent/agent/checks/__init__.py”,行661
self.check(copy.deepcopy(instance))
检查文件“/opt/datadog-agent/agent/checks.d/delayed_job.py”,第10行
连接= pymysql.connect(**实例)
连接中第88行的文件“/opt/datadog-agent/embedded/lib/python2.7/site-packages/pymysql/__init__.py”
返回Connection(* args,** kwargs)
__init__文件“/opt/datadog-agent/embedded/lib/python2.7/site-packages/pymysql/connections.py”,第644行
self._connect()
_connect中的文件“/opt/datadog-agent/embedded/lib/python2.7/site-packages/pymysql/connections.py”,行869
提高经验
OperationalError:(2003年,u“无法连接到192.168.199.86上的MySQL服务器([SSL:SSL_NEGATIVE_LENGTH] dh key 太小(_ssl.c:590))”)

我在Ubuntu机器上运行此代码,尽管起初我可能是因为SSL CA是自生成的证书。因此,我遵循了here的步骤,但是,没有任何区别。我也已验证运行此代码的进程对证书文件具有完全访问权限

有什么想法可能会导致这种情况吗?

最佳答案

由于错误信息说dh key 太小,因此较大的 key 可能会有所帮助。将默认的dh512.pem文件替换为dh4096.pem
sudo wget "https://git.openssl.org/gitweb/?p=openssl.git;a=blob_plain;f=apps/dh4096.pem" -O dh4096.pem
引用:http://www.alexrhino.net/jekyll/update/2015/07/14/dh-params-test-fail.html

关于python - pymysql无法使用SSL连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33929394/

10-12 21:45