python mysql ssh隧道_在python中使用ssh隧道连接mysql
通常為了保證數據庫安全,不會允許直接連接數據庫,而是需要通過SSH隧道去連接服務器背后的數據庫;
今天我在用Python連接遠程的MySQL時,直連遇到了無法連接的情況,使用了SSH隧道之后解決了問題;
在python中使用ssh隧道連接mysql
通常在python中,我們是使用下面的代碼連接MySQL的:
import pymysql
# 打開數據庫連接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )
依賴庫PyMySQL;
安裝:
pip install PyMySQL
此時直接連接可能會報錯:
ConnectionRefusedError: [WinError 10061] 由于目標計算機積極拒絕,無法連接。
此時,我們需要通過SSH隧道的方式進行訪問!
首先使用SSH隧道需要安裝依賴sshtunnel,使用pip安裝即可:
pip install sshtunnel
其次,首先創建SSH隧道,然后在創建MySQL連接時,使用隧道即可:
import pymysql
from sshtunnel import SSHTunnelForwarder
server = SSHTunnelForwarder(
ssh_address_or_host=('', 22), # 指定ssh登錄的跳轉機的address
ssh_username='root', # 跳轉機的用戶
ssh_password='your_passwd', # 跳轉機的密碼
remote_bind_address=('', 3306))
server.start()
db = 'dbname'
myConfig = pymysql.connect(
user="root",
passwd="password",
host="127.0.0.1", # 此處必須是 127.0.0.1
db=db,
port=server.local_bind_port)
cursor =myConfig.cursor()
cursor.execute('SELECT COUNT(*) FROM table;')
print(cursor.fetchall())
server.stop()
cursor.close()
也可以使用with語句:
import pymysql
from sshtunnel import SSHTunnelForwarder
if __name__ == '__main__':
with SSHTunnelForwarder(
ssh_address_or_host=('', 22), # 指定ssh登錄的跳轉機的address
ssh_username='root', # 跳轉機的用戶
ssh_password='ZHIrensha123456', # 跳轉機的密碼
remote_bind_address=('', 3306)) as server:
db = 'resultdb'
myConfig = pymysql.connect(
user="root",
passwd="password",
host="127.0.0.1", # 此處必須是 127.0.0.1
db=db,
port=server.local_bind_port)
cursor =myConfig.cursor()
cursor.execute('SELECT COUNT(*) FROM table;')
print(cursor.fetchall())
cursor.close()
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的python mysql ssh隧道_在python中使用ssh隧道连接mysql的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工商银行信用卡哪个好 看看哪一种才更适合
- 下一篇: 联讯证券是国企吗