我正在尝试使用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.pemsudo 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/