簡體   English   中英

將 MySQL 連接器與 Python 結合使用時出現 SSL 連接錯誤

[英]SSL Connection Error while using MySQL Connector with Python

我在 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 連接。 我試圖重新安裝庫,但沒有任何改變。

謝謝大家!

這對我有用(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

我在我的mac上遇到了同樣的問題,我正在運行mysql-connector-python版本8.0.16,我通過降級到版本8.0.5修復了這個問題

這似乎只發生在mysql-connector-python庫使用C擴展而不是純python實現時。

從版本8.0.11開始 ,默認值已更改,如果它們存在,它現在使用C擴展。
https://dev.mysql.com/doc/connector-python/en/connector-python-connectargs.html

use_pure參數說明

一種解決方案是強制連接器tu通過該標志使用python實現,只需將其添加到配置中的連接URL:

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

我有完全相同的問題,但由於我無法使用mlcr的解決方案(它是一個AWS RDS數據庫),我的解決方案是不同的。 我不得不將mysql-connector-python版本從8.xx更改為2.2.3。 這完全解決了我的問題。 希望這有助於某人。

我有同樣的問題,並通過添加解決它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.16openssl 1.1.1b (都是anaconda)。

嘗試將 ssl 模式設置為無。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM