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)
추가 정보: 파이썬은 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여러분께 참고가 될 수 있기를 바랍니다. 본인이 직접 측정한 것은 유효합니다.많은 응원 부탁드립니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Jupyter 공식 DockerHub에 대한 메모에 기재되어 있다. base-notebook minimal-notebook scipy-notebook tensorflow-notebook datascience-notebook pyspark-notebook all-s...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.