2016-10-28 6 views
3

Следующий код (бежал с другой машины, чем сервер MySQL, в пределах одной и той же локальной сети), локально подключиться к базе данных MySQL с помощью Python3 и 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 

Итак, вот что в настоящее время работает:

  • соединение локально на Databse используя 192.168.0.24:3309 адрес, поэтому я уверен, что проблема не связана с предоставлением привилегий или ошибкой входа/пароля/порта.
  • Подключить удаленно через phpmyadmin с помощью http://imaginarywebsite.ddns.net/phpmyadmin, поэтому я уверен, что проблема не возникает с моего DNS-сервера.

А вот мои 3 вопроса:

  1. Любая идея, где проблема может исходить от?
  2. Должно ли использование SSH-соединения быть решением моей проблемы?
  3. Если SSH является решением, можно ли использовать параметры SSH через mysql.connector, поскольку он не представляется в официальной документации?

Спасибо.

+0

ли вы проверить, на которых порты/интерфейсы является сервер MySQL прослушивает Использование команды.?“NETSTAT - ln | grep 3309 "на сервере вы можете увидеть, принимает ли MySQL только интерфейс localhost или другие интерфейсы. – Alesito

ответ

0

На самом деле ответ был использовать глобальный IP-адрес моего сервера вместо доменного имени, вероятно, вопрос управление именами. .

Замена хозяина = «http://imaginarywebsite.ddns.net» на «хозяина = 85.23.56 ****„сделал работу

1

Если вы используете PHPMyAdmin на том же сервере, на котором работает демон mysql, вот что происходит: у вас есть ваш веб-сервер, настроенный на прием соединений со всех интерфейсов, но mysql настроен только для приема локальных подключений. Поскольку PHPMyAdmin размещен с использованием mysql, он будет делать только локальные подключения, поэтому он работает, но ваш код этого не делает.

Итак, дважды проверьте, что ваш демон mysql настроен на прослушивание интерфейсов. В вашем файле mysql.cnf должна быть строка типа bind-address=0.0.0.0. См. this answer для получения более подробной информации.

+0

Спасибо.На самом деле я не указал его, но я запускаю оба кода с другого компьютера (192.168.0.10), чем сервер mysql (192.168.0.24). И файл my.cnf (а не mysql.cnf, это имеет значение?) Уже содержит строку bind-address = 0.0.0.0 – ylnor

1

Try, чтобы изменить вам неработающего пример этого (не HTTP в хозяине)

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

 Смежные вопросы

  • Нет связанных вопросов^_^