折腾:
期间,调试发现代码运行出错:
File "/Users/crifan/dev/dev_root/company/xxx/projects/robotDemo/app.py", line 255, in get
aiResult = QueryAnalyse(inputStr, aiContext)
File "/Users/crifan/dev/dev_root/company/xxx/projects/robotDemo/app.py", line 41, in QueryAnalyse
mediaresult = AccessData(semantic,context)
File "ai/nlp/dialog/AccessData.py", line 5, in AccessData
mediaresult = SearchByKeyword(semantic.slots["story"])
File "ai/nlp/dialog/data/xlstomysql.py", line 17, in SearchByKeyword
db = pymysql.connect(**config)
File "/Users/crifan/.local/share/virtualenvs/robotDemo-HXjMJQEQ/lib/python3.6/site-packages/pymysql/__init__.py", line 90, in Connect
return Connection(*args, **kwargs)
File "/Users/crifan/.local/share/virtualenvs/robotDemo-HXjMJQEQ/lib/python3.6/site-packages/pymysql/connections.py", line 699, in __init__
self.connect()
File "/Users/crifan/.local/share/virtualenvs/robotDemo-HXjMJQEQ/lib/python3.6/site-packages/pymysql/connections.py", line 967, in connect
raise exc
pymysql.err.OperationalError: (2003, "Can’t connect to MySQL server on ‘xxx.mysql.rds.aliyuncs.com‘ ([Errno 61] Connection refused)")
搜:
pymysql.err.OperationalError 2003 Can’t connect to MySQL server on mysql.rds.aliyuncs.com Errno 61 Connection refused
去看log前面是否有详细信息,没有找到
AWS Developer Forums: Can’t connect to MYSql server on RDS …
python – PyMySQL can’t connect to MySQL on localhost – Stack Overflow
去把之前的host从阿里云的,外网无法访问的,换成IP:
config = {
#’host’: ‘xxx.mysql.rds.aliyuncs.com’,
‘host’: ’47.x.x.x’,
结果:
还是不行。
后来发现了,貌似是:
此处之前别人代码,是放到mysql所在阿里云专用的ECS服务器上跑的。
所以可以直接访问,只能被阿里云内网识别的,另外一台,专门的mysql服务器:xxx.mysql.rds.aliyuncs.com
而此处是(Mac本地)外网去访问的,所以无法访问。
此处想要能访问感觉是:
首先要去加上安全组的端口,允许3306的入方向。
然后还要:
设置mysql服务器本身有外网IP?
貌似需要申请外网IP地址才可以?
设置内外网地址_网络管理_用户指南_云数据库 RDS 版-阿里云
“注意事项
在访问数据库前,您需要将访问数据库的 IP 地址或者 IP 段加入白名单,操作请参见设置白名单。
RDS 会针对外网地址流量收取一定费用,详细收费标准请参见云数据库 RDS 详细价格信息”
“公网流量费用信息
RDS 只收取 RDS 往客户端发送的公网流量费用。
1 元/GB,每小时计费一次;不足 1GB 的流量,计入下个计费周期。”
以为是:
1.需要开通 mysql的 公网IP
2.为了安全 最好给我自己的IP加上白名单 -》防止别人访问
3.等测试完毕后 再去释放掉mysql的公网IP
但是被建议是
在本地的时候最好连本地mysql
所以需要我:
把你们在线的mysql 拷贝到本地 本地连本地的mysql去测
本地测试好后 再去改回连原先的阿里云的mysql内网的配置
然后代码放到服务器上跑
所以现在需要去:
【已解决】把阿里云上只能内网访问的mysql数据库备份到Mac本地
然后再去:
【已解决】Mac本地搭建mysql数据库并导入已备份出的sql文件
如此,本地已经有了正在运行的mysql,且也有了对应的yourDB这个数据库了。
去改一下配置:
再去试试是否可以正常连接了。
然后终于可以了,没有mysql连接的错误了。
【总结】
此处Flask的python中pymysql去连接远程mysql数据库出错:
xxx.mysql.rds.aliyuncs.com
的原因是:
这个mysql是阿里云的RDS数据库专用服务器,该名字是阿里云内网才能识别的名字,外网无法访问,只能内网(同处一个区域的服务器)访问。
此处,为了更加安全考虑,就不去开放外网访问权限了
(阿里云后台可以针对RDS数据库申请外网IP,再去加上IP白名单,也可以实现很好的安全控制)
所以就:
把服务器中的mysql,去用(登录阿里云ECS,和RDS数据库服务器同属于一个内网)mysqldump去导出子表,然后导入到Mac本地刚建mysql数据库,然后再去把配置改为:
config = {
#’host’: ‘xxx.mysql.rds.aliyuncs.com’,
‘host’: "127.0.0.1",
‘port’: 3306,
‘user’: ‘root’,
#’password’: ‘xxxx’,
‘password’: ‘crifan_mysql’,
‘db’: ‘yourDB’,
‘charset’: ‘utf8’,
}
即可正常连接。
转载请注明:在路上 » 【已解决】pymysql连接出错:pymysql.err.OperationalError 2003 Can’t connect to MySQL server on mysql.rds.aliyuncs.com Errno 61 Connection refused