python如何通过跳板机连接MySQL

2022-12-13 217阅读 0评论

Python?=通过跳板机连接MySQL

生产环境中,为了安全起见,大多数的数据库是无法在本地直接访问的,需要先连接跳板机,然后通过跳板机访问。

这么做虽然在安全方面稍有保证,但是对于写代码的人来说,增加了一定的难度,以下是我个人对python连接跳板机连接Mysql的一些总结。

首先,需要下载sshtunnel使用pip即可,其次是连接mysql的包,这个根据自己的喜好来就好,我个人常用的是mysql.connector和pymysql,这里就使用mysql.connector。

代码如下:

import mysql.connector from sshtunnel import SSHTunnelforwarder server = SSHTunnelForwarder(         (host_jump, int(port_jump)),  # 跳板机的配置         ssh_pkey=ssh_pk_jump,         ssh_username=user_name_jump,         remote_bind_address=(host_mysql, int(port_mysql)))  # 数据服务器的配置 server.start() conn = mysql.connector.connect(host='127.0.0.1', port=server.local_bind_port, user=user_name_mysql, passWord=password_mysql, Database=database) # do something... conn.Close() server.close()

说明:

1:因为我的跳板机是通过密钥连接的,所以需要ssh_pkey参数,值是密钥的路径,如果需要通过密码连接,将该参数换成ssh_password即可;

2:SSHTunnelForwarder方法返回的server对象必须调用start()方法后才可以正常使用;

3:在连接MySQL时,connect()方法的参数中的host必须为127.0.0.1;

4:由于端口必须为数字类型,所以使用int()方法转换

5:使用结束后,为了安全起见,调用server的close()方法关闭连接,当然也可以使用with语句,如下:

with SSHTunnelForwarder(         (host_jump, int(port_jump)),  # 跳板机的配置         ssh_pkey=ssh_pk_jump,         ssh_username=user_name_jump,         remote_bind_address=(host_mysql, int(port_mysql))) as server:  # MySQL服务器的配置     conn = pymysql.connect(host='127.0.0.1', port=server.local_bind_port, user=user_name_mysql, password=password, database=database)

此时不仅可以省略close()方法,也可以省略start()方法。

MySql跳板机 python连接方法及配置

import pymysql from sshtunnel import SSHTunnelForwarder #可能需要安装上面的包   #跳板机 host_jump=跳板机ip port_jump=跳板机port user_name_jump=跳板机用户名 ssh_password=跳板机密码   #数据库 host_mysql=数据库ip port_mysql=数据库port user_name_mysql=数据库用户名 password_mysql=数据库密码 database=数据库名称 local_bind_port=22 #本地端口自行定义   server = SSHTunnelForwarder( (host_jump, int(port_jump)),  # 跳板机的配置 ssh_password=ssh_password, ssh_username=user_name_jump, remote_bind_address=(host_mysql, int(port_mysql)))  # 数据库服务器的配置   server.start() #启动server   connectiON = pymysql.connect(host='127.0.0.1', port=server.local_bind_port,  			user=user_name_mysql, password=password_mysql, database=database, 			charset="utf8", cursorclass=pymysql.cursors.dictCursor) cursor = connection.cursor() cursor.execute('select * from test_db where ID=1') data=cursor.fetchall()   #注意关闭 conn.close() server.close()   print(data)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持云初冀北。

免责声明
本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail:Goliszhou@gmail.com
$

发表评论

表情:
评论列表 (暂无评论,217人围观)

还没有评论,来说两句吧...