• pymysql连接数据库及通过SSH跳板机连接数据库


    参考资料:
    sshtunnel官方文档  https://pypi.org/project/sshtunnel/
    pymysql 通过ssh连接 mysql服务器   https://hacpai.com/article/1573725286491
     
    通过账号密码直接连接:
     
    # 打开数据库连接 主机地址 端口号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:UsersXXXX.ssh证书"SSH 连接使用密钥证书登录,该参数必须该路径为目标服务器的公钥证书。window 秘钥ppk不能识别,需要id_rsa
        (2) local_bind_address=('127.0.0.1', 5141)该参数必须SSH 目标服务器的用于连接 MySQL 或 Redis 的端口该 ip 必须为 127.0.0.1
     
     
  • 相关阅读:
    Less资源汇总
    Less函数说明
    Less使用说明
    Less 简介
    tomcat-users.xml 配置
    java project打包生成jar包(通用)
    5分钟理解String的'+'的性能及原理
    字符串"+"操作的原理
    Shell脚本实现对文件编辑
    mysql关于聚集索引、非聚集索引的总结
  • 原文地址:https://www.cnblogs.com/for-master/p/13438846.html
Copyright © 2020-2023  润新知