我在Anaconda的环境中使用Python 3.6(但在python 2.7中也遇到相同的错误)和mysql-connector-python编写简单的脚本来访问Hostgator中托管的数据库。这是错误:
Traceback (most recent call last):
File "/home/usuario/anaconda3/envs/fakebook/lib/python3.6/site-packages/mysql/connector/connection_cext.py", line 176, in _open_connection
self._cmysql.connect(**cnx_kwargs)
_mysql_connector.MySQLInterfaceError: SSL connection error: SSL_CTX_set_tmp_dh failed
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "teste.py", line 6, in <module>
passwd="senha"
File "/home/usuario/anaconda3/envs/fakebook/lib/python3.6/site-packages/mysql/connector/__init__.py", line 172, in connect
return CMySQLConnection(*args, **kwargs)
File "/home/usuario/anaconda3/envs/fakebook/lib/python3.6/site-packages/mysql/connector/connection_cext.py", line 78, in __init__
self.connect(**kwargs)
File "/home/usuario/anaconda3/envs/fakebook/lib/python3.6/site-packages/mysql/connector/abstracts.py", line 731, in connect
self._open_connection()
File "/home/usuario/anaconda3/envs/fakebook/lib/python3.6/site-packages/mysql/connector/connection_cext.py", line 179, in _open_connection
sqlstate=exc.sqlstate)
mysql.connector.errors.InterfaceError: 2026 (HY000): SSL connection error: SSL_CTX_set_tmp_dh failed
我的代码很简单,它只是尝试连接到数据库:
import mysql.connector
mydb = mysql.connector.connect(
host="192.xxx.xxx.xx",
user="root",
passwd="senha"
)
print(mydb)
我在其他计算机上多次使用了这个库,我也使用相同的库通过我的计算机连接到了这个数据库,并且该库始终与该代码一起使用。我尝试使用MySQL Workbench,似乎它正在使用代码中的相同凭据连接到数据库。我已经尝试向服务器支持寻求帮助,我的IP被允许访问数据库,即使这样我也无法与Python连接。我试图重新安装该库,但没有任何更改。
谢谢大家!
答案 0 :(得分:7)
我遇到了同样的问题,并根据建议here添加了use_pure=True
自变量来解决了这个问题:
import mysql.connector as sql
db_connection = sql.connect(host='****', database='****', user='****', password='****', use_pure=True)
我的Mac上的相关软件包:mysql-connector-python 8.0.16
和openssl 1.1.1b
已安装(均为anaconda)。
答案 1 :(得分:3)
这对我有用(Ubuntu 16.04 LTS)。从终端:
mysql_ssl_rsa_setup --datadir=/data/dir/
/etc/mysql/mysql.conf.d/mysqld.cnf
:ssl-ca=/data/dir/cacert.pem ssl-cert=/data/dir/server-cert.pem ssl-key=/data/dir/server-key.pem
sudo service mysql restart
答案 2 :(得分:1)
我在Mac上遇到了同样的问题,我正在运行mysql-connector-python 8.0.16版本,我通过降级到8.0.5版来解决了该问题
答案 3 :(得分:1)
这似乎仅在mysql-connector-python
库使用C扩展而不是纯python实现时发生。
自版本 8.0.11 起,默认值已更改,并且如果存在C扩展名,则现在使用C扩展名。
https://dev.mysql.com/doc/connector-python/en/connector-python-connectargs.html
一种解决方案是通过该标志强制连接器tu使用python实现,只需将其添加到配置中的连接网址中即可。
url = 'mysql+mysqlconnector://user:password@mysql_server/database?use_pure=True'
答案 4 :(得分:0)
我遇到了完全相同的问题,但是由于我无法使用mlcr的解决方案(它是一个AWS RDS数据库),因此我的解决方案有所不同。我不得不将mysql-connector-python版本从8.x.x更改为2.2.3。那完全解决了我的问题。希望这对某人有帮助。