python3 使用ssh隧道连接mysql的操作


Posted in Python onDecember 05, 2020

我就废话不多说了,大家还是直接看代码吧~

import pymysql
from sshtunnel import SSHTunnelForwarder
import pymysql.cursors #以dict形式输出

def dbconnect_ssh(ssh_host,ssh_port,keyfile,ssh_user,db_host,db_name,sql,db_port,db_user,db_passwd):
 with SSHTunnelForwarder(
   (ssh_host, ssh_port),
   #ssh_password="sshpasswd",
   ssh_pkey=keyfile,
   ssh_username=ssh_user,
   remote_bind_address=(db_host, db_port)
 ) as server:

  db = pymysql.connect(
   host='127.0.0.1',
   port=server.local_bind_port,
   user=db_user,
   passwd=db_passwd,
   db=db_name,
   charset="utf8",
   cursorclass=pymysql.cursors.DictCursor)

  cursor = db.cursor()

  try:
   cursor.execute(sql)
   data = cursor.fetchall()
   db.commit()
  except:
   db.rollback()

  collect = []
  for result in data:
   collect.append(result)

  db.close()
  cursor.close()

  return collect

if __name__ == "__main__":
 ssh_host = "10.10.2.13"   #SSH服务器地址
 ssh_port = 22     #SSH端口
 keyfile = xxxx.key" #SSH密钥
 ssh_user = "root"   #SSH用户名
 db_host = "127.0.0.1"  #数据库地址
 db_name = 'DBname'    #数据库名
 sql = 'show tables;'  #SQL
 db_port = 3306     #数据库端口
 db_user = 'root'    #数据库用户名
 db_passwd = '33333'   #数据库密码
 result = dbconnect_ssh(ssh_host,ssh_port,keyfile,ssh_user,db_host,db_name,sql,db_port,db_user,db_passwd)
 print (result)

补充知识:Python 使用SSHTunnel 连接内网mysql数据库

准备:

主要模块 sshtunnel, pip install sshtunnel

其余模块 pymysql,playhouse,configparser

简介:

这里用的是数据库连接池和自动的链接断开重连机制,其实最主要的就是sshtunner的建立,所以可以只看service建立的 部分

配置文件:

[mysql]
database=ad_insight
max_connections=10
stale_timeout=1000
host=localhost
user=数据库用户名
password=数据库密码
port=3306

python 代码

from playhouse.pool import PooledMySQLDatabase
from playhouse.shortcuts import ReconnectMixin
from configparser import ConfigParser
from sshtunnel import SSHTunnelForwarder
 
class RetryMySQLDatabase(ReconnectMixin,PooledMySQLDatabase):
 _instance = None
 
 @staticmethod
 def get_db_instance():
  if not RetryMySQLDatabase._instance:
   server = SSHTunnelForwarder(
    ssh_address_or_host='ssh域名或者地址',
    ssh_port=ssh端口,
    ssh_password='ssh密码',
    ssh_username='ssh名称',
    remote_bind_address=('数据库地址',数据库端口)
 
   )
   server.start()
   config = ConfigParser()
   config.read("./default.cfg",encoding="utf-8")
   RetryMySQLDatabase._instance = RetryMySQLDatabase(
    str(config['mysql']['database']),
    max_connections=int(config['mysql']['max_connections']),
    stale_timeout=int(config['mysql']['stale_timeout']),
    host=str(config['mysql']['host']),
    user=str(config['mysql']['user']),
    password=str(config['mysql']['password']),
    port=server.local_bind_port
    # port=int(config['mysql']['port'])
   )
  return RetryMySQLDatabase._instance

其实主要是在server对象的建立和server.start

希望能给大家一个参考,本人亲测有效。也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现百度关键词排名查询
Mar 30 Python
wxPython事件驱动实例详解
Sep 28 Python
Python进阶之递归函数的用法及其示例
Jan 31 Python
python 3调用百度OCR API实现剪贴板文字识别
Sep 04 Python
解决django前后端分离csrf验证的问题
Feb 03 Python
对python3.4 字符串转16进制的实例详解
Jun 12 Python
python安装scipy的方法步骤
Jun 26 Python
Python检查 云备份进程是否正常运行代码实例
Aug 22 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
Feb 26 Python
python数据类型可变不可变知识点总结
Mar 06 Python
Python socket处理client连接过程解析
Mar 18 Python
Django路由层URLconf作用及原理解析
Sep 24 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
Dec 05 #Python
python实现启动一个外部程序,并且不阻塞当前进程
Dec 05 #Python
python subprocess pipe 实时输出日志的操作
Dec 05 #Python
python 操作excel表格的方法
Dec 05 #Python
解决python 执行shell命令无法获取返回值的问题
Dec 05 #Python
Python 利用flask搭建一个共享服务器的步骤
Dec 05 #Python
快速解决pymongo操作mongodb的时区问题
Dec 05 #Python
You might like
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
php缓存技术详细总结
2013/08/07 PHP
php制作动态随机验证码
2015/02/12 PHP
PHP7正式版测试,性能惊艳!
2015/12/08 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
比Jquery的document.ready更快的方法
2010/04/28 Javascript
jQuery设置div一直在页面顶部显示的方法
2013/10/24 Javascript
Js冒泡事件详解及阻止示例
2014/03/21 Javascript
javascript 数组操作详解
2015/01/29 Javascript
JS如何实现动态添加的元素绑定事件
2019/11/12 Javascript
原生js实现购物车功能
2020/09/23 Javascript
Python实现求笛卡尔乘积的方法
2017/09/16 Python
Sanic框架Cookies操作示例
2018/07/17 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
Django自关联实现多级联动查询实例
2020/05/19 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
python安装cx_Oracle和wxPython的方法
2020/09/14 Python
python3 re返回形式总结
2020/11/20 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
2020/12/28 Python
CSS3实现多背景模拟动态边框的效果
2016/11/08 HTML / CSS
html+css实现自定义图片上传按钮功能
2019/09/04 HTML / CSS
新加坡最佳婴儿用品店:Mamahood.com.sg
2018/08/26 全球购物
荷兰最大的鞋子、服装和运动折扣店:Bristol
2021/01/07 全球购物
什么是类的返射机制
2016/02/06 面试题
广州某公司软件工程师面试题
2014/12/22 面试题
大学生工作推荐信范文
2013/12/02 职场文书
我的中国梦口号
2014/06/16 职场文书
关心下一代工作先进事迹
2014/08/15 职场文书
学校2014年度工作总结
2014/12/06 职场文书
新郎结婚感言
2015/07/31 职场文书
车间安全生产管理制度
2015/08/06 职场文书
2016年秋季运动会广播稿
2015/12/21 职场文书
2016党风廉政建设心得体会范文
2016/01/25 职场文书