Python远程连接阿里云的mysql
这个bug改了一个下午,真的撕心裂肺的搞,搞了半天终于欧克了。
先来看一下原先的核心代码:
conn = connect(
host='此处为我的云服务器ip地址',
port=3306,
user=admin,
password=pwd,
database='jing_dong',
charset='utf8')
这是报错信息:
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '我的云服务器ip地址' (timed out)")
首先还是看了无数的文章,基本上都是根据地址是localhost来改,先是判断mysql服务器是否开启,然后查看防火墙是否关闭,最后的话查看自己的每个值是否一一对应。首先我的navicate是可以登录的,那就说明mysql没问题问题就出在python身上,我有将pycharm的自带database打开,连接之后也是没问题的。最后将注意点放在了ssh上。
最终发现,如果需要访问远程服务器的Mysql数据库,但是该Mysql数据库为了安全起见,安全措施设置为只允许本地连接(也就是你需要登录到该台服务器才能使用),其他远程连接是不可以直接访问,并且相应的端口也做了修改,那么就需要基于ssh来连接该数据库。这种方式连接数据库与Navicat里面界面化基于ssh连接一样。
以下是我的代码:
from sshtunnel import SSHTunnelForwarder
import pymysql
# 通过SSH连接云服务器
server = SSHTunnelForwarder(
ssh_address_or_host=(IP, 22), # 云服务器地址IP和端口port
ssh_username=admin, # 云服务器登录账号admin
ssh_password=pwd, # 云服务器登录密码password
remote_bind_address=('localhost', 3306) # 数据库服务地址ip,一般为localhost和端口port,一般为330
)
# 云服务器开启
server.start()
# 云服务器上mysql数据库连接
con = pymysql.connect(host='127.0.0.1', # 此处必须是是127.0.0.1
port=server.local_bind_port,
user=admin, # mysql的登录账号admin
password=pwd, # mysql的登录密码pwd
db="jing_dong", # mysql中要访问的数据表
charset='utf8') # 表的字符集
# 创建游标
cur = con.cursor()
# 执行sql语句
cur.execute("""SELECT * from goods limit 10""")
# 读取数据
data = cur.fetchall()
# 打印数据
for item in data:
print(item)
# 游标、连接关闭
cur.close()
con.close()
# 云服务器关闭
server.close()
至此,整个也就代码也就可以正确的跑起来了。
版权声明:本文为jiangSummer原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。