目录
python通过ssh隧道连接mysql

详解
python通过ssh隧道连接mysql
为了保证数据库的安全,通常情况下不会允许直接连接数据库服务器,只允许堡垒机通过SSH访问,因此需要通过SSH隧道去连接服务器背后的数据库。
例如,MySQL数据库在服务器A上,只允许服务器B来访问,而本地机器C可以通过SSH连接服务器B,间接访问到服务器A上的MySQL。
python通过ssh隧道连接mysql需要用到的是sshtunnel模块。
sshtunnel是一个第三方模块,需要通过pip install sshtunnel进行安装。
用法:
# 方法一import pymysqlfrom sshtunnel import SSHTunnelForwarderserver = SSHTunnelForwarder(ssh_address_or_host=('ssh目标服务器ip', 'ssh目标服务器端口号'),ssh_username='ssh目标服务器用户名',ssh_password='ssh目标服务器用户密码',remote_bind_address=('mysql服务器ip', 'mysql服务器端口号'))server.start() # 开启ssh服务# 连接mysql数据库conn = pymysql.connect(host='127.0.0.1', # ip必须为127.0.0.1,代表本地机器port=server.local_bind_port, # ssh目标服务器用于连接mysql服务器的端口user='mysql服务器用户名',password='mysql服务器用户密码',database='mysql服务器数据库',charset='utf8')# 操作数据库server.close() # 关闭ssh服务
(左右滑动查看完整python代码)
# 方法二:通过上下文管理器,可省去开启关闭服务的步骤import pymysqlfrom sshtunnel import SSHTunnelForwarderwith SSHTunnelForwarder(ssh_address_or_host=('ssh目标服务器ip', 'ssh目标服务器端口号'),ssh_username='ssh目标服务器用户名',ssh_password='ssh目标服务器用户密码',remote_bind_address=('mysql服务器ip', 'mysql服务器端口号')) as server:# 连接mysql数据库conn = pymysql.connect(host='127.0.0.1', # ip必须为127.0.0.1,代表本地机器port=server.local_bind_port, # ssh目标服务器用于连接mysql服务器的端口user='mysql服务器用户名',password='mysql服务器用户密码',database='mysql服务器数据库',charset='utf8')# 操作数据库
(左右滑动查看完整python代码)
完整写法:
import pymysqlfrom sshtunnel import SSHTunnelForwarderwith SSHTunnelForwarder(ssh_address_or_host=('ssh目标服务器ip', 'ssh目标服务器端口号'),ssh_username='ssh目标服务器用户名',ssh_password='ssh目标服务器用户密码',remote_bind_address=('mysql服务器ip', 'mysql服务器端口号')) as server:# 连接mysql数据库conn = pymysql.connect(host='127.0.0.1', # ip必须为127.0.0.1,代表本地机器port=server.local_bind_port, # ssh目标服务器用于连接mysql服务器的端口user='mysql服务器用户名',password='mysql服务器用户密码',database='mysql服务器数据库',charset='utf8')# cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 查询返回字典,占用空间多cursor = conn.cursor() # cursor游标,查询返回默认元组的值# 查# sql1 = "SELECT * FROM user WHERE id = %s"## try:# cursor.execute(sql1, (123,))# data = cursor.fetchall()# print(data)# except Exception as e:# print(f"SQL执行失败:{e}")# 增删改sql2 = "DELETE FROM user WHERE id = %s"try:cursor.execute(sql2, (456,))conn.commit() # 提交修改except Exception as e:print(f"SQL执行失败:{e}")conn.rollback() # 如果发生错误则回滚cursor.close() # 关闭游标conn.close() # 关闭数据库的连接
(左右滑动查看完整python代码)
文章转载自潘潘潘平,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




