pymysql.err.InternalError: (1049, "未知数据库")

use*_*702 5 python mysql amazon-web-services amazon-rds boto3

我想使用来自 raspberrypi 的 python 连接 MySQL RDS DB。(我想使用选择查询从 MySQL 表“face”中获取 seq。)

我有一个错误,但我无法修复它。

这是 rds mysql 连接代码:

import rds_config
import pymysql

rds_host = rds_config.rds_host
name = rds_config.rds_user
password = rds_config.rds_pwd
db_name = rds_config.rds_db

conn = pymysql.connect(rds_host, user=name, passwd=password, db=db_name, 
connect_timeout=10)
with conn.cursor() as cur:
    cur.execute("select seq from face")
    conn.commit()
Run Code Online (Sandbox Code Playgroud)

rds_config:

rds_host='rds endpoint'
rds_port=3306
rds_user='user'
rds_pwd='password'
rds_db='db name'
Run Code Online (Sandbox Code Playgroud)

这是回溯:

Traceback (most recent call last):
  File "getRds.py", line 18, in <module>
    conn = pymysql.connect(rds_host, user=name, passwd=password, db=db_name, connect_timeout=10)
  File "/usr/local/lib/python2.7/dist-packages/pymysql/__init__.py", line 94, in Connect
    return Connection(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 327, in __init__
    self.connect()
  File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 598, in connect
    self._request_authentication()
  File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 862, in _request_authentication
    auth_packet = self._process_auth(plugin_name, auth_packet)
  File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 933, in _process_auth
    pkt = self._read_packet()
  File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 683, in _read_packet
    packet.check_error()
  File "/usr/local/lib/python2.7/dist-packages/pymysql/protocol.py", line 220, in check_error
    err.raise_mysql_exception(self._data)
  File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 109, in raise_mysql_exception
    raise errorclass(errno, errval)
pymysql.err.InternalError: (1049, u"Unknown database 'bsb-rds'")
Run Code Online (Sandbox Code Playgroud)

我已经在 vpc 安全组中添加了 ip 地址,并且公共访问已开启。可以通过 mysql cli 或工作台进行连接。

谁能帮我?

小智 0

我遇到了你的具体问题,我相信我有解决方案:

上下文:我的技术堆栈如下所示

  • 使用 AWS RDS (MySQL)
  • 在本地主机上使用 Flask 开发
  • RDS实例名称:“test-rds”
  • 实际数据库名称:测试数据库

这是我的问题所在,我相信您的问题也在同一个地方:

您在连接中使用AWS RDS NAME ,而不是使用真实的数据库名称

只需将连接中的数据库名称更改为我通过 MySQL Workbench 设置的真实数据库名称即可解决该问题。

其他需要读者注意的事项:

请确保以下事项:

  • 如果您从 AWS VPC 外部进行连接,请确保您已启用公共访问。这是一个巨大的“陷阱”。(谨防安全风险)
  • 确保您的连接没有被 NACL 阻止
  • 确保安全组规则允许您的连接