Wenn ich versuche, eine Verbindung zu einem MySQL-Server herzustellen, der von einem Docker-Image mit der Python-Bibliothek "mysql-connector-python" gestartet wurde, wird der Fehler "** SSL-Verbindungsfehler: SSL_CTX_set_tmp_dh fehlgeschlagen **" angezeigt und ich kann keine Verbindung zu MySQL herstellen. Ist vorgefallen.
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()
↓ Nach der Ausführung
Fehlermeldung
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
# //Kürzung
Jetzt, da Sie sich verbinden können, werde ich es als Memorandum belassen.
** ■ Kunde **
$ 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
** ■ MySQL Server ** --MySQL 5.7 (Standardeinstellung)
Ich habe beim Erstellen einer DB-Verbindung `` `use_pure = True``` im Argument angegeben und das zu verwendende Modul auf die echte Python-Version anstelle der erweiterten Standardversion C geändert, und jetzt kann ich eine Verbindung herstellen.
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 #← Hinzufügen
)
cursor = conn.cursor()
Ist dieser Fehler meines Erachtens ein Kompatibilitätsproblem zwischen mysql-connector-python und openssl? Es scheint, dass es verursacht wird durch. Ich habe es in meiner Umgebung nicht ausprobiert, aber laut dem folgenden Problem gibt es einen Kommentar, dass das Herabstufen der openssl-Version auf 1.0.2 das Herstellen einer Verbindung ermöglichte.
・ MySQLdb und mysql.connector sind nicht mit openssl 1.1.1a # 10646 kompatibel
Darüber hinaus scheint die Leistung durch die Verwendung der C-Implementierungsversion im Vergleich zum echten Python verbessert zu werden. Seien Sie also vorsichtig, wenn Sie mit einer großen Datenmenge umgehen.
・ Kapitel 8 Die Connector / Python C-Erweiterung ・ SSL-Fehler beim Herstellen einer Verbindung unter Linux / Mac mit Openssl 1.1.1 # 22n
Recommended Posts