Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何连接到托管在私有raspberry pi服务器上的远程MySQL数据库?_Python_Mysql_Raspberry Pi3_Remote Access - Fatal编程技术网

Python 如何连接到托管在私有raspberry pi服务器上的远程MySQL数据库?

Python 如何连接到托管在私有raspberry pi服务器上的远程MySQL数据库?,python,mysql,raspberry-pi3,remote-access,Python,Mysql,Raspberry Pi3,Remote Access,我用我的raspberry pi 3设置了一个私人家庭服务器。它的数据库是MySQL。它托管着我的个人网站,我想用python远程访问它的MySQL数据库。当数据库托管在像GoDaddy这样的共享主机上时,它工作得非常好。我无法连接到服务器的主要原因是我的服务器没有静态IP。我使用NoIP使它的IP是静态的 我的托管网站的web URL以ddns.net结尾 这是我的python代码,我正试图使用它连接到远程mysql服务器 import pymysql as _sql SQL = None d

我用我的raspberry pi 3设置了一个私人家庭服务器。它的数据库是MySQL。它托管着我的个人网站,我想用python远程访问它的MySQL数据库。当数据库托管在像GoDaddy这样的共享主机上时,它工作得非常好。我无法连接到服务器的主要原因是我的服务器没有静态IP。我使用NoIP使它的IP是静态的

我的托管网站的web URL以ddns.net结尾

这是我的python代码,我正试图使用它连接到远程mysql服务器

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()
我甚至不能用我的raspberry服务器的URL地址ping它


**请忽略我的python代码样式,因为我必须在这里复制每一行并放置4个空格以将它们显示为代码。

根据您的描述,这既不是python特有的问题,也不是MySQL特有的问题。而是路由器防火墙配置

1.-您能否从网络内部使用与从外部连接时相同的配置连接到MySQL服务器? 如果是,则很可能是您的路由器不允许从internet访问该端口。所需的更改取决于您的路由器,并且假设您有管理员访问权限,此站点应该能够提供帮助()

如果不是,那么问题最有可能出现在MySQL服务器配置中。如果执行
nestat-nap
并查找打开的端口,您应该能够识别连接到MySQL服务器进程的端口。它正在侦听的本地IP地址是什么?如果它是127.0.0.1,那么这就是问题所在。您只接受来自Rpi计算机本身的连接。必须更改配置,以便服务器将自身绑定到0.0.0.0,以便接受来自外部的连接

如果绑定地址已为0.0.0.0,是否可以对服务器的主机端口执行nc或telnet?它回复了吗


如果是这样,那么我就错了,这是python和MySQL的问题。如果没有,则是MySQL问题。

使用主机名“xyz.ddns.net”代替IP?但向我们展示您的一些代码和错误消息将有助于获得有用的答案。NoIP不会使您的IP成为静态的,它只会为您提供一个恒定的域名映射,跟踪您不断变化的动态IP地址。这种情况有几个部分:您是否可以通过防火墙访问端口3306/tcp?服务器是否在3306上侦听该接口(服务器配置)?或者,您是否具有ssh访问权限,是否可以通过ssh隧道连接到服务器?然后,若您实际连接到服务器,您是否定义了一个可以访问该数据库的远程用户?在我看来,动态ip地址是您的最小问题。是的,我有ssh访问权限,以及如何配置服务器配置文件以侦听端口3306上的连接?那么这篇文章可能会有所帮助: