python如何通過(guò)跳板機(jī)連接MySQL
python通過(guò)跳板機(jī)連接MySQL
生產(chǎn)環(huán)境中,為了安全起見,大多數(shù)的數(shù)據(jù)庫(kù)是無(wú)法在本地直接訪問的,需要先連接跳板機(jī),然后通過(guò)跳板機(jī)訪問。
這么做雖然在安全方面稍有保證,但是對(duì)于寫代碼的人來(lái)說(shuō),增加了一定的難度,以下是我個(gè)人對(duì)python連接跳板機(jī)連接mysql的一些總結(jié)。
首先,需要下載sshtunnel包,使用pip即可,其次是連接MySQL的包,這個(gè)根據(jù)自己的喜好來(lái)就好,我個(gè)人常用的是mysql.connector和pymysql,這里就使用mysql.connector。
代碼如下:
import mysql.connector from sshtunnel import SSHTunnelForwarder server = SSHTunnelForwarder( ? ? ? ? (host_jump, int(port_jump)), ?# 跳板機(jī)的配置 ? ? ? ? ssh_pkey=ssh_pk_jump, ? ? ? ? ssh_username=user_name_jump, ? ? ? ? remote_bind_address=(host_mysql, int(port_mysql))) ?# 數(shù)據(jù)庫(kù)服務(wù)器的配置 server.start() conn = mysql.connector.connect(host='127.0.0.1', port=server.local_bind_port, user=user_name_mysql, password=password_mysql, database=database) # do something... conn.close() server.close()
說(shuō)明:
1:因?yàn)槲业奶鍣C(jī)是通過(guò)密鑰連接的,所以需要ssh_pkey參數(shù),值是密鑰的路徑,如果需要通過(guò)密碼連接,將該參數(shù)換成ssh_password即可;
2:SSHTunnelForwarder方法返回的server對(duì)象必須調(diào)用start()方法后才可以正常使用;
3:在連接MySQL時(shí),connect()方法的參數(shù)中的host必須為127.0.0.1;
4:由于端口必須為數(shù)字類型,所以使用int()方法轉(zhuǎn)換;
5:使用結(jié)束后,為了安全起見,調(diào)用server的close()方法關(guān)閉連接,當(dāng)然也可以使用with語(yǔ)句,如下:
with SSHTunnelForwarder( ? ? ? ? (host_jump, int(port_jump)), ?# 跳板機(jī)的配置 ? ? ? ? ssh_pkey=ssh_pk_jump, ? ? ? ? ssh_username=user_name_jump, ? ? ? ? remote_bind_address=(host_mysql, int(port_mysql))) as server: ?# MySQL服務(wù)器的配置 ? ? conn = pymysql.connect(host='127.0.0.1', port=server.local_bind_port, user=user_name_mysql, password=password, database=database)
此時(shí)不僅可以省略close()方法,也可以省略start()方法。
MySql跳板機(jī) python連接方法及配置
import pymysql
from sshtunnel import SSHTunnelForwarder
#可能需要安裝上面的包
#跳板機(jī)
host_jump=跳板機(jī)ip
port_jump=跳板機(jī)port
user_name_jump=跳板機(jī)用戶名
ssh_password=跳板機(jī)密碼
#數(shù)據(jù)庫(kù)
host_mysql=數(shù)據(jù)庫(kù)ip
port_mysql=數(shù)據(jù)庫(kù)port
user_name_mysql=數(shù)據(jù)庫(kù)用戶名
password_mysql=數(shù)據(jù)庫(kù)密碼
database=數(shù)據(jù)庫(kù)名稱
local_bind_port=22 #本地端口自行定義
server = SSHTunnelForwarder(
(host_jump, int(port_jump)), # 跳板機(jī)的配置
ssh_password=ssh_password,
ssh_username=user_name_jump,
remote_bind_address=(host_mysql, int(port_mysql))) # 數(shù)據(jù)庫(kù)服務(wù)器的配置
server.start() #啟動(dòng)server
connection = pymysql.connect(host='127.0.0.1', port=server.local_bind_port,
user=user_name_mysql, password=password_mysql, database=database,
charset="utf8", cursorclass=pymysql.cursors.DictCursor)
cursor = connection.cursor()
cursor.execute('select * from test_db where id=1')
data=cursor.fetchall()
#注意關(guān)閉
conn.close()
server.close()
print(data)總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
pandas string轉(zhuǎn)dataframe的方法
下面小編就為大家分享一篇pandas string轉(zhuǎn)dataframe的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
python實(shí)現(xiàn)機(jī)械分詞之逆向最大匹配算法代碼示例
這篇文章主要介紹了python實(shí)現(xiàn)機(jī)械分詞之逆向最大匹配算法代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
Python如何統(tǒng)計(jì)大小寫字母?jìng)€(gè)數(shù)和數(shù)字個(gè)數(shù)
這篇文章主要介紹了Python如何統(tǒng)計(jì)大小寫字母?jìng)€(gè)數(shù)和數(shù)字個(gè)數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
PySide2出現(xiàn)“ImportError: DLL load failed: 找不到指定的模塊”的問題及解決方法
這篇文章主要介紹了PySide2出現(xiàn)“ImportError: DLL load failed: 找不到指定的模塊”的問題及解決方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2020-06-06

