Удаленное подключение MySQL работает в рабочей среде, но не в Python - PullRequest
1 голос
/ 01 июня 2019

Я установил сервер mysql (используя mariadb) и базу данных на моем raspi и теперь пытаюсь подключиться к нему с моего MacBook.

Версия: mysql Ver 15.1 Distrib 10.1.38-MariaDB, для debian-linux-gnueabihf (armv7l) с использованием readline 5.2

Соединение работает в Workbench (на Mac), но я не могу 't подключить его в python или командной строке

/etc/my.cnf на raspi выглядит так:

bind-address = 0.0.0.0

[mysqld]

Я добавил суперпользователя со всеми разрешениями и пытаюсь подключиться в командной строке моего Mac с помощью:

mysql -u {superuser} -p {superuser} -h '192.168.x.x' -P '3307' -D {securities_master}

, который не работает.

В питоне я пробовал разные варианты этого:

host = '192.168.x.x'
user='superuser'
password='superuser'
database='securities_master'

import mysql.connector
cnx = mysql.connector.connect(user=user, password=password, host=host, port='3307')
print(cnx.get_server_info()) 

командная строка возвращает это: ОШИБКА 2013 (HY000): Потеря соединения с сервером MySQL при «чтении исходного пакета связи», системная ошибка: 3

pythonСценарий возвращает следующее: pymysql.err.OperationalError: (2003, «Не удается подключиться к серверу MySQL на« 192.168.xx »([Errno 61] Соединение отклонено)»)

Соединение на рабочем месте не отключено

Ответы [ 2 ]

1 голос
/ 01 июня 2019

У меня точно такая же проблема решена так:

  1. проверьте, предоставил ли ваш mysql право "root" или "youruserID" на доступ с localhost (127.0.0.1) и локальной сети(192.168.xx) привилегии БД?Для этого просто SSH на удаленном сервере и:

     $ mysql -u root -p
     mysql> SHOW GRANTS
    

    Для меня это показывает:

     Grants for root@localhost 
    ----------
    | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD ‘*———‘ WITH GRANT OPTION |
    | GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION                                                                             |
    

    , что означает, что он получил привилегию из любого места (@ '%') вкл.localhost (127.0.0.1)

  2. удаленный доступ к python, вам необходимо установить соединитель mysql:

     $ pip install mysql-connector-python
    
  3. в Python3 вы можете попробовать это (если mariaDB, порт 3307, mysql по умолчанию 3306):

     >>> import mysql.connector
     >>> cnx =mysql.connector.connect(user='root', password='xxx', host='yourraspyi_sql_ip', port='3307')
     >>> print(cnx.get_server_info()) 
    
0 голосов
/ 01 июня 2019

Вы упомянули, что mysql -u {superuser} -p {superuser} -h '192.168.x.x' -P '22' -D {securities_master} работает правильно.

Здесь порт подключения mysql равен 22. Если это действительно работает, то

host = '192.168.x.x'
user='superuser'
password='superuser'
database='securities_master'

import pymysql.cursors
connection = pymysql.connect(host=host,
                             port=3306,
                             user=user,
                             password=password,
                             db=database,
                             charset='utf8',
                             cursorclass=pymysql.cursors.DictCursor)

должно быть

host = '192.168.x.x'
user='superuser'
password='superuser'
database='securities_master'

import pymysql.cursors
connection = pymysql.connect(host=host,
                             port=22,
                             user=user,
                             password=password,
                             db=database,
                             charset='utf8',
                             cursorclass=pymysql.cursors.DictCursor)

Номер порта изменился с 3306 на 22.

Вы можете проверить это с помощью

pymysql.connect(db='securities_master', user='superuser', passwd='superuser', host='192.168.x.x', port=22)
...