2016-10-28 137 views
3

下面的代碼(在不同的機器比MySQL服務器運行,在同一個局域網內),在本地使用Python3連接到MySQL數據庫和mysql.connector工作:遠程連接到MySQL與Python mysql.connector

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 

所以,這裏是當前工作:

  • 本地連接使用192.168.0.24:3309地址DATABSE,所以我相信這個問題不是來自'權限授予'或任何登錄/密碼/端口錯誤。
  • 使用http://imaginarywebsite.ddns.net/phpmyadmin通過phpmyadmin遠程連接,所以我相信問題不是來自我的DNS服務器。

這裏是我的3個問題:

  1. 任何想法,問題就來的呢?
  2. 應該使用SSH連接解決我的問題?
  3. 如果SSH是解決方案,是否可以通過mysql.connector使用SSH參數,因爲它似乎沒有出現在官方文檔中?

謝謝。

+0

你覈實哪些端口/接口是MySQL服務器監聽使用命令?’netstat的 - ln | grep 3309「在服務器上,你可以看到MySQL是否只接受本地主機接口或其他接口。 – Alesito

回答

0

其實答案是用我的服務器的全局IP地址而不是域名,可能是一個問題名稱管理。通過「主機= 85.23.56

更換主機=「http://imaginarywebsite.ddns.net」 ****‘使工作

1

如果您在運行mysql守護程序的同一臺服務器上運行PHPMyAdmin,請執行以下操作:將您的Web服務器配置爲接受來自所有接口的連接,但將mysql配置爲僅接受本地連接。由於PHPMyAdmin與mysql共同使用,它只會進行本地連接,這就是爲什麼它可以工作,但是你的代碼不能。

因此,請仔細檢查您的mysql守護程序是否配置爲偵聽接口。你的mysql.cnf文件中應該有一行類似bind-address=0.0.0.0的行。有關更多詳細信息,請參閱this answer

+0

謝謝。其實我沒有指定它,但我運行的是不同於mysql服務器(192.168.0.24)的另一臺機器(192.168.0.10)的兩個代碼。和my.cnf(不是mysql.cnf,它有什麼關係?)文件已經包含行bind-address = 0.0.0.0 – ylnor

1

嘗試編輯你非工作示例這個(在主機沒有HTTP)

import mysql.connector 
cnx = mysql.connector.connect(host='imaginarywebsite.ddns.net', database='import_test',user='user_builder', password='password***', port=3309)