通过 SSH 隧道访问远程数据库
Accessing a remote database through SSH tunnel
我想通过 SSH 隧道访问远程数据库。
server = SSHTunnelForwarder(
('172.17.9.125', 22),
ssh_password="123456",
ssh_username="root",
remote_bind_address=('127.0.0.1', 3306))
server.start()
database = pymysql.connect(host='127.0.0.1',
port=3306,
user='root',
passwd='root')
try:
dbsql = "CREATE DATABASE TestDB" # Create database
except Exception as e:
print("Error: ", e)
database.cursor().execute(dbsql)
global db, cursor
db = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='TestDB')
cursor = db.cursor()
print("Connected to MySQL database")
f = open("testdb.sql") # Execute .sql file, creating data tables
full_sql = f.read()
sql_commands = full_sql.split(';')[:-1]
try:
for sql_command in sql_commands:
if sql_command is not None:
cursor.execute(sql_command)
else:
print("Null")
print("Created database")
except Exception as e:
print("Error: ", e)
我想在此远程服务器 172.17.9.125 上创建一个名为 "TESTDB" 的新数据库。
但是我在本地主机上创建了这个数据库。我在这里做错了什么?
由于您已经有一个数据库 运行,您的 3306
端口已用于该数据库,因此无法绑定。
解决方案:将其绑定到其他端口并尝试连接到该端口。
您可以在 SSHTunnelForwarder
.[=16= 的参数中使用 local_bind_address=('0.0.0.0', 1234)
绑定到另一个地址(这将是您的目标本地 address/port 它将绑定到) ]
所以你的连接 TunnelForwarder 应该是这样的
server = SSHTunnelForwarder(
('172.17.9.125', 22),
ssh_password="123456",
ssh_username="root",
local_bind_address=('0.0.0.0', 1234),
remote_bind_address=('127.0.0.1', 3306))
现在将连接到 port 1234
database = pymysql.connect(host='127.0.0.1',
port=1234,
user='root',
passwd='root')
db = pymysql.connect(host='127.0.0.1', port=1234, user='root', passwd='root', db='TestDB')
我想通过 SSH 隧道访问远程数据库。
server = SSHTunnelForwarder(
('172.17.9.125', 22),
ssh_password="123456",
ssh_username="root",
remote_bind_address=('127.0.0.1', 3306))
server.start()
database = pymysql.connect(host='127.0.0.1',
port=3306,
user='root',
passwd='root')
try:
dbsql = "CREATE DATABASE TestDB" # Create database
except Exception as e:
print("Error: ", e)
database.cursor().execute(dbsql)
global db, cursor
db = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='TestDB')
cursor = db.cursor()
print("Connected to MySQL database")
f = open("testdb.sql") # Execute .sql file, creating data tables
full_sql = f.read()
sql_commands = full_sql.split(';')[:-1]
try:
for sql_command in sql_commands:
if sql_command is not None:
cursor.execute(sql_command)
else:
print("Null")
print("Created database")
except Exception as e:
print("Error: ", e)
我想在此远程服务器 172.17.9.125 上创建一个名为 "TESTDB" 的新数据库。
但是我在本地主机上创建了这个数据库。我在这里做错了什么?
由于您已经有一个数据库 运行,您的 3306
端口已用于该数据库,因此无法绑定。
解决方案:将其绑定到其他端口并尝试连接到该端口。
您可以在 SSHTunnelForwarder
.[=16= 的参数中使用 local_bind_address=('0.0.0.0', 1234)
绑定到另一个地址(这将是您的目标本地 address/port 它将绑定到) ]
所以你的连接 TunnelForwarder 应该是这样的
server = SSHTunnelForwarder(
('172.17.9.125', 22),
ssh_password="123456",
ssh_username="root",
local_bind_address=('0.0.0.0', 1234),
remote_bind_address=('127.0.0.1', 3306))
现在将连接到 port 1234
database = pymysql.connect(host='127.0.0.1',
port=1234,
user='root',
passwd='root')
db = pymysql.connect(host='127.0.0.1', port=1234, user='root', passwd='root', db='TestDB')