我一直在使用 Heroku 来托管我的 Discord 机器人。它已成功连接到托管在 ClearDB 上的 MySQL 数据库。但是,最近,每当我使用机器人并尝试连接到数据库时,它都会抛出此错误:
2026 (HY000): SSL connection error: error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol
到目前为止它一直工作得很好,我没有改变任何东西。对于背景,我所做的只是删除了一个管道,并使我的应用程序成为没有任何管道的独立应用程序。以防万一这有帮助。
这是因为 Heroku 已经更新了吗?我该如何修复我的机器人?如果您需要更多信息,请告诉我。
感谢任何帮助,并提前感谢您!
编辑: 数据库连接代码:
import mysql.connector
def create_conn():
conn = None
try:
conn = mysql.connector.connect(host="HOST",
database="DB",
user="USER",
password="PWD")
except Exception as e:
print(e)
return conn
def execute_query(query, params, fetchall=True):
conn = create_conn()
if conn:
cursor = conn.cursor()
cursor.execute(query % params)
try:
if fetchall:
results = cursor.fetchall()
else:
results = cursor.fetchone()
except:
results = None
conn.commit()
cursor.close()
conn.close()
return results
else:
return False
数据库连接曾经可以工作,当我在我的测试机器(树莓派)上运行它时仍然可以工作。
编辑 2: 要求.txt:
aiohttp==3.6.3
async-timeout==3.0.1
attrs==20.3.0
CacheControl==0.12.6
cachetools==4.2.0
certifi==2020.12.5
cffi==1.14.4
chardet==3.0.4
click==7.1.2
cryptography==3.3.1
cssselect==1.1.0
cssutils==1.0.2
discord==1.0.1
discord-pretty-help==1.2.0
discord.py==1.6.0
emoji==0.6.0
Flask==1.1.2
google-api-core==1.24.1
google-api-python-client==1.12.8
google-auth==1.24.0
google-auth-httplib2==0.0.4
google-cloud-core==1.5.0
google-cloud-firestore==2.0.2
google-cloud-storage==1.35.0
google-crc32c==1.1.0
google-resumable-media==1.2.0
googleapis-common-protos==1.52.0
grpcio==1.34.0
gunicorn==20.0.4
httplib2==0.18.1
idna==2.8
importlib-metadata==3.3.0
itsdangerous==1.1.0
jeepney==0.6.0
Jinja2==2.11.2
keyring==21.8.0
lxml==4.6.2
MarkupSafe==1.1.1
msgpack==1.0.2
multidict==4.7.6
mysql-connector-python==8.0.22
numpy==1.19.4
pandas==1.1.5
premailer==3.7.0
proto-plus==1.13.0
protobuf==3.14.0
pyasn1==0.4.8
pyasn1-modules==0.2.8
pycparser==2.20
python-dateutil==2.8.1
python-dotenv==0.15.0
pytz==2020.4
requests==2.25.1
rsa==4.7
schedule==0.6.0
SecretStorage==3.3.0
six==1.15.0
typing-extensions==3.7.4.3
uritemplate==3.0.1
urllib3==1.26.2
Werkzeug==1.0.1
yagmail==0.14.245
yarl==1.5.1
zipp==3.4.0
答案 0 :(得分:0)
我不太确定如何执行此操作,但我很确定您必须禁用 SSL 才能使其正常工作,希望这会有所帮助。
答案 1 :(得分:0)
显然,您需要在您的应用和 MySQL 之间强制实施 SSL 连接。
如果您使用的是 ruby stack
,请按照给定的选项操作,您的 SSL 错误问题将得到解决。
$ openssl rsa -in cleardb_id-key.pem -out cleardb_id-key-no-password.pem
您现在可以删除 cleardb_id-key.pem 并将 cleardb_id-key-no-password.pem 重命名为 cleardb_id-key.pem,您将在您的应用中使用该名称。
*使用修改后的 CLEARDB_DATABASE_URL 的值设置 DATABASE_URL 配置变量,如下所示:
$ heroku config:add DATABASE_URL="mysql2://abc1223:dfk243@us-cdbr-east.cleardb.com/my_heroku_db?
sslca=cleardb-ca-cert.pem&sslcert=cleardb_id-cert.pem&sslkey=cleardb_id-key.pem&reconnect=true"
<块引用>
注意我们是如何在 URL 末尾添加“reconnect=true”参数的?这是为了让您的应用程序在连接超时时自动重新连接到 ClearDB。
从这里开始,只需重新启动您的应用程序(如果 Heroku 尚未为您执行此操作),只要您在 DATABASE_URL 中指定了正确的文件名和证书路径,您的应用程序现在将通过 SSL 连接到清除数据库。