Ошибка соединения SSL при использовании MySQL Connector с Python - PullRequest
0 голосов
/ 01 февраля 2019

Я использую Python 3.6 (но я получаю ту же ошибку с Python 2.7) и mysql-connector-python в среде Anaconda для написания простого скрипта для доступа к моей базе данных, размещенной в 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.Я попытался переустановить библиотеку, но ничего не изменилось.

Спасибо всем!

Ответы [ 5 ]

0 голосов
/ 14 августа 2019

У меня была та же проблема, и я решил ее, добавив аргумент 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установлена ​​(обе анаконды).

0 голосов
/ 07 июня 2019

Кажется, что это происходит только тогда, когда библиотека mysql-connector-python использует расширения C вместо чистой реализации Python.

Начиная с версии 8.0.11 , значение по умолчанию изменилось, и теперь оно используетрасширения C, если они присутствуют.
https://dev.mysql.com/doc/connector-python/en/connector-python-connectargs.html

use_pure argument description

Одно из решений состоит в том, чтобы заставить коннектор использовать реализацию Python черезфлаг, просто добавив его в URL подключения в вашей конфигурации:

url = 'mysql+mysqlconnector://user:password@mysql_server/database?use_pure=True'
0 голосов
/ 08 мая 2019

У меня была точно такая же проблема, но, поскольку я не смог использовать решение mlcr (это была база данных AWS RDS), мое решение было другим.Мне пришлось изменить версии mysql-connector-python с 8.xx на 2.2.3.Это полностью решило мою проблему.Надеюсь, это кому-нибудь поможет.

0 голосов
/ 15 мая 2019

Я столкнулся с той же проблемой на моем Mac, я запускал mysql-connector-python версии 8.0.16, я исправил проблему, опустив ее до версии 8.0.5

0 голосов
/ 02 февраля 2019

Это сработало для меня (Ubuntu 16.04 LTS).С терминала:

  1. пересоздать сертификаты (datadir на ваш выбор):

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
Перезапустите сервер MySQL: sudo service mysql restart
...