pymysql連接數據庫及通過SSH跳板機連接數據庫


參考資料:
sshtunnel官方文檔   https://pypi.org/project/sshtunnel/
pymysql 通過ssh連接 mysql服務器   https://hacpai.com/article/1573725286491
SSHTunnelForwarder隧道連接mysql  https://blog.csdn.net/helloxiaozhe/article/details/77850367
 
通過賬號密碼直接連接:
 
# 打開數據庫連接 主機地址 端口號3306 用戶名 密碼 數據庫名
db = pymysql.connect(host="10.12.102.202", port=3309, user="qa_dev", passwd="xxx", db="wechat_test", charset="utf8")
# 創建一個游標對象 cursor()
cursor = db.cursor()
# SQL查詢語句
sql = "SELECT * FROM city WHERE city_id = '336'"
try:
    cursor.execute(sql)
    results = cursor.fetchall()
except:
    print("語句執行錯誤")
# 關閉數據庫
db.close()
 
通過ssh跳板機連接數據庫:
 
1、出於安全考慮,數據庫服務器只允許堡壘機通過ssh訪問,MySQL數據庫安裝在A機器上,只允許服務器B訪問,而我在C機器上可以通過SSH連接B服務器
如圖所示:    

 

 2、代碼示例      A:mysql 服務   B:跳板機  C:本地訪問機器

 1 import pymysql
 2 from sshtunnel import SSHTunnelForwarder
 3 
 4 with SSHTunnelForwarder(
 5     ssh_address_or_host=('sa.xxxx.cn', 22),       # ssh 目標服務器 ip 和 port
 6     ssh_username="zhaoxxx",     # ssh 目標服務器用戶名
 7     #ssh_password= "",           # ssh 目標服務器用戶密碼
 8     ssh_pkey="C:\\Users\\Administrator\\.ssh\\id_rsa",   # ssh 目標服務器證書
 9     #ssh_private_key_password="",  # ssh 目標服務器證書密碼
10     remote_bind_address=('10.10.xx.xxx', 3306),     # mysql 服務ip 和 part
11     local_bind_address=('127.0.0.1', 5143)                     # ssh 目標服務器的用於連接 mysql 或 redis 的端口,該 ip 必須為 127.0.0.1
12 ) as server:
13     conn = pymysql.connect(
14         host=server.local_bind_host,                # server.local_bind_host 是 參數 local_bind_address 的 ip
15         port=server.local_bind_port,                # server.local_bind_host 是 參數 local_bind_address 的 port
16         user="name",
17         password="password",
18         db="test_data",
19         charset="utf8"
20     )
21     cursor = conn.cursor()
22     sql = "SELECT * FROM satel_report WHERE id = 1"
23     try:
24         cursor.execute(sql)
25         data = cursor.fetchall()
26         print(data)
27     except:
28         print("SQL執行失敗")
3、注意事項
    (0) charset是要跟數據庫的編碼一樣
    (1) ssh_pkey="C:\Users\XXXX\.ssh\證書"SSH 連接使用密鑰證書登錄,該參數必須該路徑為目標服務器的公鑰證書。window 秘鑰ppk不能識別,需要id_rsa
    (2) local_bind_address=('127.0.0.1', 5141)該參數必須SSH 目標服務器的用於連接 MySQL 或 Redis 的端口該 ip 必須為 127.0.0.1
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM