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

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

猜你喜欢

转载自blog.csdn.net/qq_37992974/article/details/104212839