J'utilise Python 3.6 (mais j'obtiens la même erreur avec Python 2.7) et mysql-connector-python dans un environnement Anaconda pour coder un script simple) pour accéder à ma base de données hébergée dans Hostgator. C'est l'erreur:
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
Mon code est très simple, il suffit d'essayer de se connecter à la base de données:
import mysql.connector
mydb = mysql.connector.connect(
Host="192.xxx.xxx.xx",
user="root",
passwd="senha"
)
print(mydb)
J'ai utilisé cette bibliothèque plusieurs fois sur d'autres ordinateurs, je me suis également connecté à cette même base de données via mon ordinateur, en utilisant la même bibliothèque et cela a toujours fonctionné avec ce code. J'ai essayé avec MySQL Workbench et il semble qu'il se connecte à la base de données en utilisant les mêmes informations d'identification que celles de mon code. J'ai déjà essayé de demander de l'aide au support du serveur, mon IP est autorisée à accéder à la base de données et même si je ne peux pas me connecter avec Python. J'ai essayé de réinstaller la bibliothèque, mais rien n'a changé.
Merci tout le monde!
Cela a fonctionné pour moi (Ubuntu 16.04 LTS). Depuis le terminal:
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
Cela ne semble se produire que lorsque le mysql-connector-python
la bibliothèque utilise les extensions C au lieu de la pure implémentation python.
Depuis la version 8.0.11 , la valeur par défaut a changé et elle utilise désormais les extensions C si elles sont présentes.
https://dev.mysql.com/doc/connector-python/en/connector-python-connectargs.html
Une solution consiste à forcer le connecteur à utiliser l'implémentation python via cet indicateur, en l'ajoutant simplement à l'URL de connexion dans votre configuration:
url = 'mysql+mysqlconnector://user:password@mysql_server/database?use_pure=True'
J'ai rencontré le même problème et l'ai résolu en ajoutant use_pure=True
argument basé sur une suggestion ici :
import mysql.connector as sql
db_connection = sql.connect(Host='****', database='****', user='****', password='****', use_pure=True)
Packages pertinents sur mon mac: mysql-connector-python 8.0.16
et openssl 1.1.1b
installé (les deux anaconda).
J'ai rencontré le même problème sur mon Mac, j'utilisais la version 8.0.16 de mysql-connector-python, j'ai résolu le problème en rétrogradant vers la version 8.0.5
J'ai eu exactement le même problème, mais comme je ne pouvais pas utiliser la solution de mlcr (c'était une base de données AWS RDS), ma solution était différente. J'ai dû changer les versions de mysql-connector-python de 8.x.x à 2.2.3. Cela a résolu mon problème entièrement. J'espère que cela aide quelqu'un.