python如何通过跳板机连接MySQL
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)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
python使用wmi模块获取windows下的系统信息 监控系统
Python用WMI模块获取Windows系统的硬件信息:硬盘分区、使用情况,内存大小,CPU型号,当前运行的进程,自启动程序及位置,系统的版本等信息。2015-10-10安装python-docx后,无法在pycharm中导入的解决方案
这篇文章主要介绍了安装python-docx后,无法在pycharm中导入的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2021-03-03Python初学者需要注意的事项小结(python2与python3)
这篇文章主要介绍了Python初学者需要注意的事项小结,包括了python2与python3的一些区别,需要的朋友可以参考下2018-09-09对django 模型 unique together的示例讲解
今天小编就为大家分享一篇对django 模型 unique together的示例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2019-08-08
最新评论