Lorsque j'essaye de me connecter à MySQL avec mysql-connector-python, je ne peux pas me connecter avec l'erreur "Erreur de connexion SSL: SSL_CTX_set_tmp_dh a échoué"

introduction

Lorsque j'essaie de me connecter à un serveur MySQL démarré à partir d'une image Docker à l'aide de la bibliothèque "mysql-connector-python" de Python, j'obtiens une erreur "** SSL connection error: SSL_CTX_set_tmp_dh failed **" et je ne parviens pas à me connecter à MySQL. S'est produit.

test.py


import mysql.connector

conn = mysql.connector.connect(
    host='127.0.0.1',
    port='3306',
    user='user',
    password='password', 
    database='sample_db'
)
cursor = conn.cursor()

↓ Après exécution

Message d'erreur


Traceback (most recent call last):
  File "/Users/user1/opt/anaconda3/lib/python3.7/site-packages/mysql/connector/connection_cext.py", line 200, in _open_connection
    self._cmysql.connect(**cnx_kwargs)
_mysql_connector.MySQLInterfaceError: SSL connection error: SSL_CTX_set_tmp_dh failed

# //réduction

Maintenant que vous pouvez vous connecter, je vais le laisser sous forme de mémorandum.

Environnement d'exécution

** ■ Client **

$ conda list --show-channel-urls
mysql-connector-c         6.1.11               hccea1a4_0
mysql-connector-python    8.0.18           py37h3febbb0_1
openssl                   1.1.1d               h1de35cc_3
python                    3.7.4                h359304d_1

** ■ Serveur MySQL ** --MySQL 5.7 (paramètre par défaut)

Contre-mesures

J'ai spécifié use_pure = True dans l'argument lors de la création d'une connexion à la base de données, et j'ai changé le module à utiliser pour la version Python authentique au lieu de la version étendue C par défaut, et maintenant je peux me connecter.

7.1 Connector/Python Connection Arguments

test.py


import mysql.connector

conn = mysql.connector.connect(
    host='127.0.0.1',
    port='3306',
    user='user',
    password='password',
    database='sample_db',
    use_pure=True  #← Ajouter
)
cursor = conn.cursor()

D'après ce que j'ai regardé, cette erreur est-elle un problème de compatibilité entre mysql-connector-python et openssl? Il semble que cela soit causé par. Je ne l'ai pas essayé dans mon environnement, mais selon le problème suivant, il y a un commentaire selon lequel la rétrogradation de la version openssl vers 1.0.2 a rendu possible la connexion.

MySQLdb et mysql.connector sont incompatibles avec openssl 1.1.1a # 10646

De plus, il semble que les performances seront améliorées en utilisant la version d'implémentation C par rapport au véritable Python, donc soyez prudent lorsque vous manipulez une grande quantité de données.

Chapitre 8 Le Connecteur / Extension Python CErreur SSL lors de la connexion sous Linux / Mac à l'aide d'Openssl 1.1.1 # 22n

Recommended Posts

Lorsque j'essaye de me connecter à MySQL avec mysql-connector-python, je ne peux pas me connecter avec l'erreur "Erreur de connexion SSL: SSL_CTX_set_tmp_dh a échoué"
Quand j'essaye d'installer mysqlclient avec Django, j'obtiens l'erreur: la commande 'gcc' a échoué avec l'état de sortie 1.
J'obtiens [Erreur 2055] en essayant de me connecter à MySQL avec Heroku
Lorsque j'importe TensorFlow vers Python, j'obtiens "Erreur d'importation: échec du chargement de la DLL: le module spécifié est introuvable."
Lorsque j'essaye d'importer des pandas sur macOS, j'obtiens l'erreur No module named'_bz2 '
Lorsque j'essaye de connecter django et postgresql avec Docker, j'obtiens l'erreur "django.db.utils.OperationalError: impossible de traduire le nom d'hôte" db "en adresse: Nom ou service inconnu"
Lorsque j'essaye de mettre à jour les données sur DynamoDB avec Python (boto3), j'obtiens "ExpressionAttributeNames contient une clé invalide: Erreur de syntaxe; clé: <nom de clé>"
Quand j'essaye de pousser avec heroku, ça ne marche pas
Que faire lorsqu'une erreur se produit avec import _ssl
[Solution] Lorsque j'essaye de me connecter à CloudSQL avec GAE, j'obtiens une ImportError uniquement lorsque dev_appserver.
Comment traiter l'erreur "Impossible de charger le module" canberra-gtk-module "qui apparaît lorsque vous exécutez OpenCV
J'obtiens une erreur en essayant d'installer maec 4.0.1.0 avec pip
Lorsque j'essaye d'utiliser pip, le module SSL n'est pas disponible.
Lorsque WSL Distro ne démarre pas (Erreur: «WslRegisterDistribution a échoué avec l'erreur: 0x800706be.»)
Lorsque j'essaie d'exécuter la commande make de Makefile avec os / exec de golang, la deuxième exécution et les suivantes entraînent une erreur.
Comment gérer l'erreur SSL lors de la connexion à S3 avec Python boto
J'obtiens un UnicodeDecodeError en essayant de me connecter à oracle avec python sqlalchemy
Connectez-vous à MySQL avec Python dans Docker
Erreur d'importation: impossible d'importer le nom 'Flask' lorsque le nom de fichier est flask.py dans Flask
Lorsque j'ai essayé de changer le mot de passe root avec ansible, je ne pouvais pas y accéder.
Notez la solution car django n'a pas pu s'installer avec pip
Trois choses auxquelles j'étais accro lors de l'utilisation de Python et MySQL avec Docker
Lorsque je me suis connecté à un serveur Jupyter distant avec VScode, il était distant mais local.
Essayez de résoudre le problème du fizzbuzz avec Keras
J'ai eu une erreur lors de l'enregistrement avec OpenCV
J'ai essayé de sauvegarder les données avec discorde
Je voulais jouer avec la courbe de Bézier
Connectez-vous à MySQL avec Python sur Raspberry Pi
Une histoire qui a échoué lors de la tentative de suppression du suffixe d'une chaîne avec rstrip
J'obtiens une erreur lorsque j'essaie d'élever Python à la série 3 en utilisant pyenv dans Catalina
Je souhaite être informé de l'environnement de connexion lorsque RaspberryPi se connecte au réseau