# Python根据ssh远程桌面连接Mysql数据库操作

> 作者/来源: UCloud 运营管理员
> 发布时间: 2023-01-14T02:18:00.000Z
> 分类: 云主机
> 标签: 数据库, 安全, Python
> 原文链接: http://117.50.162.249:3000/yun/articles/621

---

# Python根据ssh远程桌面连接Mysql数据库操作

> 来源: https://www.ucloud.cn/yun/130278.html
> 作者: 89542767
> 发布日期: 发布于2023-01-14 10:18

本文关键给大家介绍了Python根据ssh远程桌面连接Mysql数据库操作实例详细说明，感兴趣的小伙伴可以参考借鉴一下，希望可以有一定的帮助，祝愿大家多多的发展，尽早涨薪

　　环境

　　如果有需要浏览虚拟服务器的Mysql数据库系统，但是该Mysql数据库系统为了安全起见期内，安全保护措施设为只可以宽带连接（也就是说你需要验证到该台网络服务器才能进行），别的远程桌面连接是不能够访问外网，而且对应的端口号都做了改动，那就需要根据ssh来联接该数据库系统。这种方法数据库服务器与Navicat里边页面化根据ssh联接相同。

![01.png](https://ucloud-blog.cn-bj.ufileos.com/articles/130278/images/130278_000.png)

![02.png](https://ucloud-blog.cn-bj.ufileos.com/articles/130278/images/130278_001.png)

　　数据库服务器

　　组装支持库

　　如果想联接Mysql，首先要组装pymysql

```
　　pipinstallpymysql
```

　　组装根据ssh的库sshtunnel

```
　　pipinstallsshtunnel#现阶段全新0.3.1版
```

　　提议组装最新sshtunnel库，旧版库也有一些bug

　　联接Mysql

　　根据ssh联接Mysql可以查询sshtunnel的文本文档，里边也有一些实例

```
　　withSSHTunnelForwarder(
　　('192.168.1.1',2222),
　　ssh_password='123456',
　　ssh_username='root',
　　remote_bind_address=('127.0.0.1',3306))asserver:
　　print('SSH配对成功')
　　conn=pymysql.connect(host='127.0.0.1',
　　port=server.local_bind_port,
　　user='root',
　　database='data',
　　charset='utf8')
　　print('mysql数据库服务器取得成功')
　　cursor=conn.cursor()
　　...#获取数据操作，此处省略
　　cursor.close()
　　conn.close()
　　自定查看函数公式
　　能够对上边的联接开展封装形式为一个函数，便捷别的地方应用
　　defmysql_ssh(sql,args=None):
　　withSSHTunnelForwarder(
　　('192.168.1.1',2222),
　　ssh_password='123456',
　　ssh_username='root',
　　remote_bind_address=('127.0.0.1',3306))asserver:
　　print('SSH配对成功')
　　conn=pymysql.connect(host='127.0.0.1',
　　port=server.local_bind_port,
　　user='root',
　　database='data',
　　charset='utf8')
　　print('mysql数据库服务器取得成功')
　　cursor=conn.cursor()
　　print('游标卡尺获得取得成功')
　　try:
　　print(f'实行查询语句：{sql}主要参数：{args}')
　　cursor.execute(sql,args)
　　print('数据查询取得成功')
　　conn.commit()
　　print('事务提交成功')
　　datas=cursor.fetchall()
　　success=True
　　except:
　　print('数据查询失败')
　　datas=None
　　success=False
　　print('正在关闭数据库服务器')
　　cursor.close()
　　conn.close()
　　returndatas,success
```

　　注意事项：

　　在操作数据库时，conn.commit()、cursor.close()、conn.close()这种必须要正确使用，避免不必要bug

　　调用方法时提议通过这种方式cursor.execute(sql,args)，避免sql注入风险

　　综上所述，这篇文章就给大家介绍到这里了，希望可以给大家带来帮助。