如何连接到私有树莓派服务器上托管的远程MySQL数据库?

问题描述

我已使用raspBerry pi 3设置了一个私人家庭服务器。它以MysqL作为数据库。它托管了我的个人网站,我想使用python远程访问其MysqL数据库。当数据库托管在GoDaddy之类的共享托管上时,它工作得很好。我无法连接到服务器的主要原因是因为我的服务器没有静态IP。我使用NoIP将其IP设为静态。

托管网站的网址以ddns.net结尾

这是我试图连接到远程MysqL服务器的python代码

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问题。