我在服务器上有一个mysql数据库用于工作。我在服务器上ssh然后使用mysql -u username -p
输入数据库,此时命令行将提示我输入密码。
我想远程访问数据库进行一些开发。我看到mysql.connector
是一个用于连接mysql数据库的库,但我可以使用python访问服务器然后访问数据库吗?
答案 0 :(得分:1)
您可以使用SSH tunneling将本地计算机上侦听的端口重定向到远程计算机上的端口。
ssh -L9999:localhost:3306 me@my.work.com
这会将您计算机上端口 9999 的流量重定向到 my.work.com 上的端口 3306 。我们将 localhost 提供给-L
,因为我们想要隧道到服务器本身。我们还可以通过您的工作服务器创建一个隧道到一些只能访问它的机器。
现在,您可以使用端口 9999 在自己的计算机上连接连接器,并将流量通过隧道连接到 my.work.com:3306 。
答案 1 :(得分:0)
您可以使用https://gist.github.com/shnjp/856179中的tunnel.py代码。
with make_tunnel('me@mywork.com:3306') as t:
mysql.connector.connect(host='localhost',
database='mysql',user='root',password='PASS')
这假设您的本地主机没有在端口3306上运行任何应用程序。如果您有一些,那么您需要使用" port =" make_tunnel中的参数,并提供在localhost上使用的其他端口。
答案 2 :(得分:0)
You can also connect from python to the database without using any tunnel.
For that, enable the mysql server to allow connections from the outside uncommenting and changing the bind-address line in the /etc/mysql/my.cnf file to bind-address = 0.0.0.0
. After that, restart the server with sudo service mysql restart
and finally grant permissions to your user to access from the outside GRANT SELECT,INSERT,UPDATE,DELETE ON your_database.* TO 'your_user'@'%' IDENTIFIED BY 'your_pass';
Now you'll be able to connect from python to the database
import mysql.connector
ip_of_the_database = 'x.x.x.x'
cnx = mysql.connector.connect(host = ip_of_the_database,
user = 'your_user',
password = 'your_pass',
database = 'your_database')