python3 使用ssh隧道连接mysql的操作
作者:莺声门径 发布时间:2023-09-01 19:15:11
标签:python3,ssh,mysql
我就废话不多说了,大家还是直接看代码吧~
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
希望能给大家一个参考,本人亲测有效。
来源:https://blog.csdn.net/qq_33385691/article/details/105249507


猜你喜欢
- 目录前言什么是 websocketwebsocket 通信原理和机制websocket 的特点构建实时日志跟踪的小例子前言websocket
- 当你链接到应用程序以使用MySQL客户端库时,可能会遇到以mysql_开始的未定义引用错误,如下所示:/tmp/ccFKsdPa.o: 在函
- sort 包源码解读前言我们的代码业务中很多地方需要我们自己进行排序操作,go 标准库中是提供了 sort 包是实现排序功能的,这里来看下生
- 一、缓存目的1、减小过载2、避免重复计算3、提高系统性能二、如何进行缓存三、缓存类型四、缓存粒度分类五、缓存的设置与使用示例一:CACHES
- 从本地文件夹中选取一张图片并在canvas上显示from tkinter import *from tkinter import filed
- 前言mysql中的explain命令可以用来查看sql语句是否使用了索引,用了什么索引,有没有做全表扫描。可以帮助我们优化查询语句。expl
- 实验介绍增量恢复一般适用的场景:1、人为的sql语句破坏了数据库2、在进行下一次完全备份之前发生系统故障导致数据库数据丢失3、在主从架构中,
- 本文主要研究的是使用Python获取本机所有网卡ip,掩码和广播地址,分享了相关的实例代码,具体介绍如下。搜了一天,竟然没找到一段合适的代码
- 目录查找算法 -- 简介顺序查找二分查找插值查找斐波那契查找树表查找1、二叉树查找算法。2、平衡查找树之2-3查找树(2-3 Tree)3、
- 1、添加依赖<dependency><groupId>com.baomidou</groupId><
- 环境: Python 3.6.4 + Pycharm Professional 2017.3.3 + PyQt5 + PyQt5-tools
- 简介MQTT.js 是一个开源的 MQTT 协议的客户端库,使用 JavaScript 编写,主要用于 Node.js
- 在MySQL 5.6.6之前,TIMESTAMP的默认行为:■TIMESTAMP列如果没有明确声明NULL属性,默认为NOT NULL。(而
- 本文实例为大家分享了Python时间戳使用和相互转换的具体代码,供大家参考,具体内容如下1.将字符串的时间转换为时间戳方法: &n
- Python程序中,在进程和进程之间是不共享全局变量的数据的。我们来看一个例子:from multiprocessing import Pr
- 这篇文章主要介绍threading模块中的主类Thread的一些主要方法,实例代码如下:''' Crea
- 从信息组织角度来看,段落内行之间的关系要比段落之间的关系低一个级别,所以在呈现上段落之间的“段距”应该大于段落之内的“行距”,如此才能一目了
- <html><head><script type="text/javascript" sr
- 这是网站制作很流行的下拉列表两级连动的代码,也是很多人使用的代码。下面,先来看这段代码:<%dim countset&nbs
- 环境准备前提已经安装好python、pycharm,配置了对应的环境变量。1、安装selenium模块文件–>设置