PyMySQL, использующий localhost vs некогерентное поведение сокетов - PullRequest
0 голосов
/ 24 сентября 2019

Я использую PyMySQL для подключения к базе данных, работающей на локальном хосте.Я могу легко получить доступ к базе данных, используя комбинацию имени пользователя и пароля в командной строке и adminer , поэтому база данных здесь не является проблемой.

Мой код выглядит следующим образом.Однако, когда с использованием параметров host="127.0.0.1", я получаю OperationalError и Errno 111. , используя один и тот же код, но соединение через сокет, на котором работает Mariadb, вполне нормально.

import pymysql.cursors
from pprint import pprint


# This causes an OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'localhost' ([Errno 111] Connection refused)")   
# connection = pymysql.connect(
#     host="127.0.0.1",
#     port=3306,
#     user="root",
#     password="S3kr37",
#     db="my_test",
#     )

# This works.
connection = pymysql.connect(
    user="root",
    password="S3kr37",
    db="my_test",
    unix_socket="/var/lib/mysql/mysql.sock"
    )

try:
    with connection.cursor() as cursor:
        sql = "select * from MySuperTable"
        cursor.execute(sql)
        results = cursor.fetchall()
        pprint(results)
finally:
    connection.close()

Что я делаю не так?

PS: Обратите внимание, что этот вопрос имеет ту же проблему, но предлагаемое решение - сокет. Это недостаточно хорошо : я хочу знать , почему Я не могу использовать имя хоста, как предлагается в документации.

1 Ответ

1 голос
/ 24 сентября 2019

Errorcode 2003 (CR_CONN_HOST_ERROR) возвращается клиентской библиотекой, если клиент не смог установить tcp-соединение с сервером.

Сначала вы должны проверить, можете ли вы подключиться через telnet илиMySQL клиент командной строки на ваш сервер.Если нет, проверьте файл конфигурации сервера:

  • работает ли сервер на порту 3306?
  • отключен ли IPv4?
  • включен ли пропуск сети?
  • активирован ли bind-адрес (с другим IP?
...