通过跳板机SSH/远程链接mysql
三部分配置:
SSH通道配置ip,port,用户名,密码
模板服务器ip,port
映射的本地的ip,port,目标服务器用户名密码
import pymysql
from sshtunnel import SSHTunnelForwarder
server = SSHTunnelForwarder(
ssh_address_or_host=('xx.11.12.28', 2210),
ssh_password='xxx',
ssh_username='xxx',
remote_bind_address=('xx.168.57.26', 3306))
server.start()
# 以下注释部分为pymysql方式连接
myConfig = pymysql.connect(
user="xxx",
passwd="xxx",
host="127.0.0.1", # 此处必须是 127.0.0.1
db='cms',
port=server.local_bind_port)
cursor = myConfig.cursor()
cursor.execute('SELECT * FROM yh_szbgd_eventinfo;')
print(cursor.fetchall())
myConfig.close()
server.stop()
from sshtunnel import SSHTunnelForwarder
from sqlalchemy import create_engine
import pandas as pd
from sqlalchemy.pool import NullPool
server = SSHTunnelForwarder(
ssh_address_or_host=('xx', 2210),
ssh_password='xx',
ssh_username='xx',
remote_bind_address=('xx', 3306))
server.start()
engine = create_engine(
'mysql_mart+pymysql://xx:xx@127.0.0.1:%s/cms' % server.local_bind_port)
pd_dataFrame = pd.read_sql('yh_szbgd_eventinfo', engine)
print(pd_dataFrame)
# 以下注释部分为pymysql方式连接
# myConfig = pymysql.connect(
# user="****",
# passwd="****",
# host="127.0.0.1", # 此处必须是 127.0.0.1
# db='***',
# port=server.local_bind_port)
# cursor = myConfig.cursor()
# cursor.execute('SELECT * FROM target_feature;')
# print(cursor.fetchall())
# myConfig.close()
server.stop()
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
通俗点讲,以前的网络通信都是明文数据传输,一旦被截获,那么我们的信息都将被对方轻易获取。后来SSH协议横空出世,用户登录时向服务器发送请求,服务器将公钥发送给客户端,客户端通过公钥加密后再将加密的的数据发送给服务器,服务器在通过一个只有自己知道的私钥去解密,虽然这中间也无法避免所有的攻击,但相对于近乎“裸奔”的数据通信来说已经是很大的进步
1.写端口号的时候切记不要加引号!!!
2.最上面的那个连接信息一定是服务器的,不是数据库的!!!
3.绑定的本地端口号不一定非要是13306,只要没有端口冲突都行!!!
4.如果密码中有‘\’,切记一定要用‘\’进行转义!!!
其实以我浅显的知识储备来解释,还是很好理解的。首先通过 sshtunnel.SSHTunnelForwarder 进行端口映射,将远程服务器的3306端口映射到本地的13306端口,再连接本地的端口,那么后续对本地13306端口的操作其实都可以视为对线上服务器3306端口的操作,理论上来说,PuTTY也是进行了相同的操作,以此达到内网穿透的目的。
连接数据库的方法其实还是挺简单的,最主要还是细心,以前有一个憨憨,他们的密码中有一个反斜杠,而他没有转义就直接传了进去,导致死活连接不上,找了好久的原因也没找着,最后就不了了之
相关文章
- Mysql远程连接数据库报错排查:pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '**.**.**.**' (timed out)")
- MySQL高级查询 之 与 Group By 一起使用的函数 和 关键字
- MySQL创建用户与授权
- Mac Pro 解压安装MySQL二进制分发版 mysql-5.6.30-osx10.11-x86_64.tar.gz(不是dmg的)
- MySQL Cluster 数据分布(分区、分组)
- 【MySQL】数据库字符校对规则
- Linux - mysql 异常:登录不上mysql数据库
- Java通过mysql-connector-java-8.0.11连接MySQL Server 8.0遇到的几个问题
- MySQL高可用性之Keepalived+Mysql(双主热备)
- R语言使用RMySQL连接及读写Mysql数据库
- MySQL报错Packet for query is too large问题解决
- MySQL事务隔离级别理解_解读MYSQL的可重复读、幻读及实现原理
- Mysql 如果有多个可选条件怎么加索引_MySQL|mysql-索引
- mysql 故障整理
- MySQL 可以用localhost 连接,但不能用IP连接的问题,局域网192.168.*.* 无法连接mysql
- MySQL Study之--Mysql无法启动“mysql.host”
- mysql高可用架构了解
- MySQL之自带四库之mysql库
- MySQL 全表扫描
- Mycat启动正常但无法连接ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql
- MySQL_08_在编写SQL语句层面优化速度
- 安装MySQL数据库8.0服务实例
- mysql 父子节点查询