以下代码(从同一局域网内的mysql服务器以外的其他机器运行),使用Python3和mysql.connector本地连接到MySQL数据库:
import mysql.connector
cnx = mysql.connector.connect(host='192.168.0.24', database='import_test',user='user_builder', password='password***', port=3309)
但是,以下代码,远程连接到同一个数据库,不起作用:
import mysql.connector
cnx = mysql.connector.connect(host='http://imaginarywebsite.ddns.net', database='import_test',user='user_builder', password='password***', port=3309)
相反,我收到以下错误:
File "C:\Users\****\AppData\Roaming\Python\Python34\site-packages\mysql\connector\network.py", line 464, in open_connection
errno=2003, values=(self.get_address(), _strioerror(err)))
mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on 'http://imaginarywebsite.ddns.net:3309' (11004 getaddrinfo failed)
以下是my.cnf文件的摘录:
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
[mysqld]
innodb_buffer_pool_size=4G
innodb_log_file_size=1024M
innodb_read_io_threads=64
innodb_write_io_threads=64
innodb_io_capacity=7000
innodb_thread_concurrency=0
port = 3309
bind-address = 0.0.0.0
所以,这是目前的工作原理:
以下是我的3个问题:
感谢。
答案 0 :(得分:1)
如果您在运行mysql守护程序的同一台服务器上运行PHPMyAdmin,那么发生了什么:您的Web服务器已配置为接受来自所有接口的连接,但配置了mysql只接受本地连接。由于PHPMyAdmin与mysql共存,它只会建立本地连接,这就是它工作的原因,但是你的代码没有。
因此,请仔细检查您的mysql守护程序是否配置为侦听接口。你的mysql.cnf文件中应该有一行bind-address=0.0.0.0
。有关详细信息,请参阅this answer。
答案 1 :(得分:1)
尝试编辑非工作示例(主机中没有http)
import mysql.connector
cnx = mysql.connector.connect(host='imaginarywebsite.ddns.net', database='import_test',user='user_builder', password='password***', port=3309)
答案 2 :(得分:-1)
实际上答案是使用我服务器的全局IP地址而不是域名,这可能是名称管理的问题。
将'host ='http://imaginarywebsite.ddns.net'替换为'host = 85.23.56。****'使其正常工作。