python3 ssh 터널로 mysql 연결 작업

3584 단어 python3sshmysql
나는 쓸데없는 말을 더 이상 하지 않겠다. 모두들 코드를 직접 보는 것이 좋겠다.

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)
추가 정보: 파이썬은 SSHTunnel을 사용하여 내망 mysql 데이터베이스에 연결합니다.
준비:
주요 모듈 sshtunnel,pip install sshtunnel
나머지 모듈pymysql,playhouse,configparser
소개:
여기는 데이터베이스 연결 탱크와 자동 링크 끊기 재연결 메커니즘을 사용하는데 사실 가장 중요한 것은 sshtunner의 구축이기 때문에 서비스 구축 부분만 볼 수 있다
구성 파일:

[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
사실은 주로 서버 대상의 구축과 서버에 있다.start
여러분께 참고가 될 수 있기를 바랍니다. 본인이 직접 측정한 것은 유효합니다.많은 응원 부탁드립니다.

좋은 웹페이지 즐겨찾기