web-dev-qa-db-ja.com

MySQLコネクタをPythonで使用しているときのSSL接続エラー

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に接続できません。ライブラリを再インストールしようとしましたが、何も変わりませんでした。

みんなありがとう!

8
Julio

これは私のために働きました(Ubuntu 16.04 LTS)。ターミナルから:

  1. 証明書を再作成します(datadirは任意です):

mysql_ssl_rsa_setup --datadir=/data/dir/

  1. 以下を/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
  1. MySQLサーバーを再起動します:Sudo service mysql restart
3
mlcr

これは、mysql-connector-pythonライブラリは、純粋なpython実装の代わりにC拡張を使用します。

バージョン8.0.11以降、デフォルトが変更され、C拡張が存在する場合はそれを使用するようになりました。
https://dev.mysql.com/doc/connector-python/en/connector-python-connectargs.html

use_pure argument description

1つの解決策は、コネクターのtuに強制的にpython実装をそのフラグを介して実装し、構成の接続URLに追加するだけです。

url = 'mysql+mysqlconnector://user:password@mysql_server/database?use_pure=True'
9
juan

私は同じ問題を抱えており、提案に基づいてuse_pure=True引数を追加することで解決しました here

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)。

8
HaMi

Macで同じ問題が発生しました。mysql-connector-pythonバージョン8.0.16を実行していました。バージョン8.0.5にダウングレードして問題を修正しました

3
Aldo Okware

私はまったく同じ問題を抱えていましたが、mlcrのソリューション(AWS RDSデータベースでした)を使用できなかったため、私のソリューションは異なりました。 mysql-connector-pythonのバージョンを8.x.xから2.2.3に変更する必要がありました。それで私の問題は完全に解決しました。これが誰かを助けることを願っています。

0
dnishiyama