PyMySQL не может подключиться к MySQL на локальном хосте - PullRequest
31 голосов
/ 30 июля 2011

Я пытаюсь подключиться к MySQL на локальном хосте, используя PyMySQL:

import pymysql
conn = pymysql.connect(db='base', user='root', passwd='pwd', host='localhost')

но (как на Python 2.7, так и на Python 3.2) я получаю сообщение об ошибке:

socket.error: [Errno 111] Соединение отклонено

pymysql.err.OperationalError: (2003, «Не удается подключиться к серверу MySQL на« localhost »(111)»)

Я уверен, что mysqld работает, потому что я могу подключиться, используя команду mysql или phpMyAdmin. Более того, я могу подключиться с помощью MySQLdb на Python 2 с почти таким же кодом:

import MySQLdb
conn = MySQLdb.connect(db='base', user='root', passwd='pwd', host='localhost')

Кажется, что проблема на стороне PyMySQL, а не MySQL, но я не знаю, как ее решить.

Ответы [ 5 ]

48 голосов
/ 16 января 2013

Две догадки:

  1. Запустите mysqladmin variables | grep socket, чтобы узнать, где находится сокет, и попробуйте установить соединение следующим образом:

    pymysql.connect(db='base', user='root', passwd='pwd', unix_socket="/tmp/mysql.sock")
    
  2. Запустите mysqladmin variables | grep port и убедитесь, что порт 3306. Если нет, вы можете установить порт вручную следующим образом:

    pymysql.connect(db='base', user='root', passwd='pwd', host='localhost', port=XXXX)
    
9 голосов
/ 31 июля 2011

Похоже, что изменение localhost на 127.0.0.1 исправляет ошибку, по крайней мере, в моей конфигурации.Если этого не произойдет, я буду искать ошибки в tcp sockets connection и, конечно, публиковать их как ошибку в pymysql bugtrack.

5 голосов
/ 09 июля 2016

Я решил проблему, заменив localhost на 127.0.0.1 и изменив пароль на мой пароль базы данных MYSQL, как показано ниже;

conn = pymysql.connect(
    host = '127.0.0.1',
    port = 3306,
    user = 'root',
    passwd = 'XXXXXXXXX',
    db = 'mysql'
)
1 голос
/ 17 декабря 2018

Я встретил тот же вопрос, и мое решение состоит в следующем.

  1. Запустите «ssh -fN -L 3307: mysql_host: 3306 ssh_user @ ssh_host» в моем терминале.
  2. затем введите ваш пароль ssh
  3. conn = pymysql.connect (db = 'base', user = 'root', passwd = 'pwd', host = 'localhost'), почему возникает эта ошибка, потому что база данных непрямая ссылка поддержки.
0 голосов
/ 28 декабря 2017

Вам также необходимо добавить порт к соединению. Попробуйте это, и это отлично работает.

pymysql(Module Name).connect(host="localhost", user="root", passwd="root", port=8889, db="db_name")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...