遗憾的是,我无法使MySQLdb工作,也无法通过命令行连接到需要我使用SSL的AWS服务器。这通过SequelPro可以很好地工作。
在提到的GUI旁边,我以编程方式使用mysqlconnector
而不是MySQLdb
作为引擎并传递ssl args,这样可行:
from sqlalchemy import create_engine
import pandas as pd
pd.read_sql("SHOW DATABASES",
create_engine(CONNECTION_STRING.replace('mysqldb', 'mysqlconnector'),
connect_args={'ssl_ca': '~/Downloads/rds-combined-ca-bundle.pem'}))
由于某些原因,我不想使用mysqlconnector而是使用MySQLdb。因此,我尝试了以下两种方式:
conn = create_engine(CONNECTION_STRING)
pd.read_sql_query("SHOW DATABASES", conn)
conn = create_engine(
CONNECTION_STRING,
connect_args={'ssl': {'ca': '~/Downloads/rds-combined-ca-bundle.pem'}})
pd.read_sql_query("SHOW DATABASES", conn)
对于第一个,它给出了预期的访问被拒绝:
OperationalError: (_mysql_exceptions.OperationalError) (1045, "Access denied for user 'MYUSER'@'MYHOST' (using password: YES)") (Background on this error at: http://sqlalche.me/e/e3q8)
第二个:
OperationalError: (_mysql_exceptions.OperationalError) (2026, 'SSL connection error: error:00000001:lib(0):func(0):reason(1)') (Background on this error at: http://sqlalche.me/e/e3q8)
从谷歌搜索“error:00000001:lib(0):func(0):reason(1)
”错误我想到滥用包并多次尝试各种基本变化(包括mode=VERIFY_IDENTITY
,通过密码):
mysql -h HOST --ssl-ca=~/Downloads/rds-combined-ca-bundle.pem -u USER -p
Enter password:
ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)
抛出相同的错误。
也许这可以在mysqlconnector上运行(没有传递任何东西),因为ssl
包(我尝试的其他两个选项都没有使用,但我绝对可以从连接器中看到)输出{{1 }}:
ssl.get_default_verify_paths()
,所以有一些默认配置使这个工作(sequelPro可能相同)。但总而言之,我只是不明白为什么它可以与sequelPro和连接器包一起工作,但不能使用命令行和MySQLdb。
尝试以下(来自here)可以正常工作:
DefaultVerifyPaths(cafile='~/anaconda2/ssl/cert.pem', capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='~/anaconda2/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='~/anaconda2/ssl/certs')
但由于mysql -u MYUSER -h MYHOST --ssl -p
标志已弃用,因此不是首选。
我希望你们中的一些人能够看到我在哪里错过了什么!