当前位置: 首页 > 工具软件 > sshtunnel > 使用案例 >

sshtunnel mysql_Python使用SSH隧道连接intranet MySQL数据库,SSHTunnel,内网,mysql

江宏伟
2023-12-01

声明:本博客是一次开发中的随记,供自己和大家可以参考。

准备:

主要模块 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

希望会有所帮助,本人亲测有效

 类似资料: