2011-07-30 1 views
23

Tôi đang cố gắng để kết nối với MySQL trên localhost sử dụng PyMySQL:PyMySQL không thể kết nối tới MySQL trên localhost

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

nhưng (cả trên Python 2.7 và Python 3.2) tôi nhận được lỗi:

socket.error: [Errno 111] Connection refused

pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' (111)")

Tôi chắc chắn mysqld đang chạy vì tôi có thể kết nối bằng cách sử dụng lệnh mysql hoặc phpMyAdmin. Hơn nữa, tôi có thể kết nối sử dụng MySQLdb trên Python 2 với gần cùng mã:

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

Dường như vấn đề là trên PyMySQL bên chứ không phải là MySQL nhưng tôi không có ý tưởng làm thế nào để giải quyết nó.

+1

thử sử dụng host = "yourIpAddress" thay vì localhost, nó có vẻ là một vấn đề conf – Hassek

Trả lời

37

Hai đoán:

  1. Run mysqladmin variables | grep socket để có được nơi các ổ cắm có vị trí, và cố gắng thiết lập một kết nối như vậy:

    pymysql.connect(db='base', user='root', passwd='pwd', unix_socket="/tmp/mysql.sock") 
    
  2. Run mysqladmin variables | grep port và xác minh rằng cảng là 3.306 Nếu không, bạn có thể đặt cổng theo cách thủ công như vậy:

    pymysql.connect(db='base', user='root', passwd='pwd', host='localhost', port=XXXX) 
    
+2

Sử dụng '/ var/run/mysqld/mysqld.sock' đã thực hiện thủ thuật. Cảm ơn! (Bounty trong 21 giờ) – Ryan

+2

Phân loại kỳ lạ rằng nó sẽ là cần thiết, mặc dù. Tôi tự hỏi nếu tập tin 'my.cnf' của bạn không được cấu hình đúng. Tôi đoán cổng không được cấu hình đúng, và MySQLdb đủ thông minh để thử sử dụng socket thay vì TCP. (Một số cuộc thảo luận [ở đây] (http://dev.mysql.com/doc/refman/5.5/en//connecting.html), nơi họ nói về '--protocol') – RecursivelyIronic

+1

Tôi chưa thực sự có một' của tôi Tệp .cnf' - nhưng PHP dường như có thể tìm ra rằng 'localhost' sẽ trở thành điều đó. Tôi thích sử dụng '.sock' s tốt hơn, mặc dù :) – Ryan

5

Có vẻ như thay đổi localhost thành 127.0.0.1 khắc phục lỗi, ít nhất là trong cấu hình của tôi. Nếu không, tôi sẽ tìm lỗi trong tcp sockets connection và, tất nhiên, đăng nó dưới dạng lỗi trong báo cáo lỗi pymysql.

+2

Tôi cố gắng để sử dụng '127.0.0.1' hoặc tên máy chủ của tôi thay vì nhưng kết quả đều giống nhau ... –

+2

didn này không sửa nó cho tôi. – gozzilli

4

Tôi đã giải quyết vấn đề bằng cách thay thế localhost bằng 127.0.0.1 và thay đổi mật khẩu thành mật khẩu cơ sở dữ liệu MYSQL của tôi như được hiển thị bên dưới;

conn = pymysql.connect(
    host = '127.0.0.1', 
    port = 3306, 
    user = 'root', 
    passwd = 'XXXXXXXXX', 
    db = 'mysql' 
) 
0

Bạn cũng cần thêm cổng vào kết nối. Hãy thử điều này và nó hoạt động tốt.

pymysql(Module Name).connect(host="localhost", user="root", passwd="root", port=8889, db="db_name") 
+2

Chào mừng bạn đến với SO! Trước khi trả lời câu hỏi, luôn đọc câu trả lời hiện có. Câu trả lời này đã được cung cấp. Thay vì lặp lại câu trả lời, hãy bỏ phiếu cho câu trả lời hiện có. Một số hướng dẫn viết câu trả lời hay có thể tìm thấy tại đây https://stackoverflow.com/help/how-to-answer – LightBender