чтение базы данных sql с помощью sqlalchemy: OperationalError [Ошибка 111] Отказано в соединении

#python #pandas #sqlalchemy #operationalerror

#python #pandas #sqlalchemy #operationalerror

Вопрос:

Это работает нормально

 from sqlalchemy import create_engine
import pandas as pd

db_connection_str = 'mysql pymysql://User:PW@localhost/DBName'
db_connection = create_engine(db_connection_str)

df = pd.read_sql('SELECT * FROM tablename', con=db_connection)
  

Если я localhost заменяю IP-адрес, это не так

 from sqlalchemy import create_engine
import pandas as pd

db_connection_str = 'mysql pymysql://User:PW@192.168.0.7/DBName'
db_connection = create_engine(db_connection_str)

df = pd.read_sql('SELECT * FROM tablename', con=db_connection)
  

OperationalError: (pymysql.err.OperationalError) (2003, «Не удается подключиться к серверу MySQL на ‘192.168.0.7’ (ошибка 111] отказано в подключении)»)
(Справочная информация об этой ошибке в: http://sqlalche.me/e/13/e3q8 )

Но необходимо заменить localhost на IP, потому что я хочу выполнить скрипт с клиента.

РЕДАКТИРОВАТЬ: в моем /etc/mysql/my.cnf не было bind-adddress: — поэтому я добавил последнюю строку:

 # The MariaDB configuration file
#
# The MariaDB/MySQL tools read configuration files in the following order:
# 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults,
# 2. "/etc/mysql/conf.d/*.cnf" to set global options.
# 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options.
# 4. "~/.my.cnf" to set user-specific options.
#
# If the same option is defined multiple times, the last one will apply.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.

#
# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]

# Import all .cnf files from configuration directory
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/

bind-address = 0.0.0.0
  

и выполняется sudo systemctl restart mariadb

Теперь у меня появилось новое сообщение об ошибке:

InternalError: (pymysql.err.InternalError) Неверный порядковый номер пакета — получено 1 ожидаемый 0 (справочная информация об этой ошибке в: http://sqlalche.me/e/13/2j85 )

Комментарии:

1. Проверьте конфигурацию вашего сервера MySQL, чтобы узнать, установлено ли bind-address значение (или по умолчанию) localhost .

2. Попробуйте запустить этот тестовый скрипт для проверки подключения непосредственно из PyMySQL.

3. Тестовый скрипт работает при использовании localhost , но не с IP-адресом: InternalError: Packet sequence number wrong - got 1 expected 0

Ответ №1:

Решение для InternalError: Packet sequence number wrong - got 1 expected 0 ошибки можно найти здесь: https://github.com/PyMySQL/PyMySQL/issues/971