问题描述
我已使用raspBerry pi 3设置了一个私人家庭服务器。它以MysqL作为数据库。它托管了我的个人网站,我想使用python远程访问其MysqL数据库。当数据库托管在GoDaddy之类的共享托管上时,它工作得很好。我无法连接到服务器的主要原因是因为我的服务器没有静态IP。我使用NoIP将其IP设为静态。
托管网站的网址以ddns.net结尾
import pyMysqL as _sql
sql = None
def sql_ONLINE_CONNECTION():
try:
connection = _sql.connect(host='URL',user='USERNAME',password='PASSWORD',db='dbnAME',charset='utf8mb4',port=3306,cursorclass=_sql.cursors.DictCursor)
return connection
except _sql.err.OperationalError as e:
return False
def Boot():
global sql
try:
sql = sql_ONLINE_CONNECTION()
if sql is not None:
print("[MysqL CONNECTION ESTABLISHED!]")
else:
print("[Failed!]")
except Exception as e:
print(e)
if __name__ == '__main__':
Boot()
我什至无法使用其URL地址对树莓派服务器执行ping操作。
**请忽略我的python代码样式,因为我必须在此处复制每一行,并放置4个空格以将其显示为代码。
解决方法
根据您的描述,这既不是python特定问题,也不是MySQL特定问题。但是是路由器防火墙配置。
1.-您可以从网络内部使用与外部连接相同的配置从MySQL服务器连接到MySQL服务器吗? 如果是,则很可能是您的路由器不允许从Internet访问该端口。所需的更改取决于您的路由器,并且假设您拥有管理员对其的访问权限,则该站点应该能够提供帮助(https://portforward.com/router.htm)
如果不是,则问题很可能出在MySQL服务器配置中。如果执行nestat -nap
并查找打开的端口,则应该能够识别那些附加到MySQL服务器进程的端口。它正在监听的本地IP地址是什么?如果是127.0.0.1,那就是问题。您只接受来自Rpi机器本身的连接。必须更改配置,以便服务器将其自身绑定到0.0.0.0,以便接受来自外部的连接。
如果绑定地址已经是0.0.0.0,您可以对服务器的host:port执行nc或telnet吗?会回信吗?
如果这样做,那我错了,这是python和MySQL的问题。如果不是这样,那就是MySQL问题。