【问题标题】:Problems connecting to MariaDB using the Python mysql.connector使用 Python mysql.connector 连接到 MariaDB 的问题
【发布时间】:2020-01-02 10:54:32
【问题描述】:

我正在尝试使用 Python 3.7 使用 mysql.connector 的 8.0.18 版(通过 pip 作为 mysql-connector-python 包安装)连接到各种 MySQL 和 MariaDB 数据库。

在这个特定的实例中,我正在尝试连接到 MariaDB 5.5.52 实例,但在其他系统上似乎遇到了同样的问题。

如果我尝试这样连接:

cnx = mysql.connector.connect(user=c['user'], password=c['password'], host=c['host'], database=c['database'])

我明白了

mysql.connector.errors.ProgrammingError: 1045 (28000): Access denied for user '<user name>'@'<ip address>' (using password: YES)

神秘的是,我可以使用客户端应用程序 (JetBrains DataGrip) 从同一台 PC 连接到相关数据库而不会出现任何问题,因此我确信凭据是有效的并且没有任何网络或阻止连接的类似问题(即端口 3306 已打开)。

我能找到的唯一共同因素似乎是 mysql.connector。我检查了手册,看起来语法是正确的。

更新 按照@makozaki 的建议使用不同的连接器(pymysql),代码可以工作。因此,问题肯定是 mysql.connector 。我可能会尝试将其回滚到以前的版本,看看是否可以修复它(除非有人知道解决方法)。

【问题讨论】:

  • 如果您怀疑可能是连接器问题,那么您如何先测试其他连接器,例如pymysql,如果问题再次出现,那么可能是您拼错了您的凭据,或者您的用户有多个访问设置,其中一个没有适当的权限。
  • @makozaki Doh! 我怎么没想到呢!如果我使用 pymysql 连接器,那么它工作正常。最奇怪的。感谢您的建议。
  • 我仍然会检查数据库用户权限。您尝试连接的用户可能有多个权限,其中一个可能不会授予适当的访问权限,例如'user@localhost' 与'user@127.0.0.1'。我检查了以前的连接器,它对我来说很好。

标签: python mysql mariadb


【解决方案1】:

通过添加附加参数“tls_versions”,我能够为 mysql.connector 修复同样的错误消息:

cnx = mysql.connector.connect(user=c['user'], password=c['password'], host=c['host'], database=c['database'], 'tls_versions'=['TLSv1.1', 'TLSv1.2'])

这是可行的,因为从update 8.0.18 开始,如果它与您的数据库版本不匹配,您现在可以specify the TLS version

【讨论】:

  • 谢谢,这完美解决了我的问题:mysql.connector.errors.InterfaceError: Failed parsing handshake; end byte not present in buffer
【解决方案2】:

据我所知,这与字符编码有关。我使用的密码中有一些奇怪的字符,包括一个英镑符号和一个带重音的外国(欧洲)字符。

由于我还不明白的原因,DataGrip 客户端毫无问题地通过了这些,但是 mysql.connector 不知何故 使它们变得高贵。我怀疑这与编码有关,尽管一切设置为(或默认为)utf-8。

我已将密码更改为以 base64 编码的密码,问题似乎已解决,但我很沮丧,因为我一开始还没有弄清楚它发生的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 2017-03-11
    • 2019-09-15
    • 1970-01-01
    • 2019-05-01
    • 2017-06-16
    • 1970-01-01
    相关资源
    最近更新 更多