2011-01-11 34 views
15

Tôi mới đến này để có thể có các thuật ngữ sai nhưng khi tôi chạy kịch bản sau đây:Không thể kết nối với localhost sử dụng Python của MySQLdb

import MySQLdb 

conn = MySQLdb.connect (host = 'localhost', 
    user = 'erin', 
    passwd = 'erin', 
      db = 'sec') 

tôi nhận được lỗi:

File "/Library/Python/2.6/site-packages/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg/MySQLdb/__init__.py", line 81, in Connect 
    return Connection(*args, **kwargs) 
    File "/Library/Python/2.6/site-packages/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg/MySQLdb/connections.py", line 187, in __init__ 
    super(Connection, self).__init__(*args, **kwargs2) 
_mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)") 

Không có tệp nào được gọi là mysql.sock trong thư mục đó nhưng tôi không biết ổ cắm là gì hoặc cách chỉ định vị trí chính xác cho nó bằng cách sử dụng mô-đun MySQLdb.

+0

Bạn có thể tiết kiệm nhiều thời gian hơn nếu phát hiện thấy mã lỗi (2) trong thông báo lỗi. 2 có nghĩa là không tìm thấy tập tin: # perror 2 Mã lỗi hệ điều hành 2: Không có tập tin hoặc thư mục như vậy – akuzminsky

Trả lời

23

nếu ổ cắm mysql của bạn không được đặt trong /tmp/mysql.sock, bạn có thể xác định nó với

conn = MySQLdb.connect (unix_socket = 'path_to_your_socket', host = 'localhost', user = 'erin', passwd = 'erin', db = 'sec') 

chỉnh sửa: cho MAMP trên macosx, đường dẫn socket mysql phải giống như /Applications/MAMP/tmp/mysql/mysql.sock

+0

Làm cách nào để tìm ổ cắm của tôi? – erin

+2

bằng cách sử dụng 'mysql_config --socket' trong trình bao của bạn nên làm, hoặc/path/to/mysql/bin/mysql_config nếu bạn đã cài đặt nó trong/opt hoặc một cái gì đó – roman

+0

Tôi xin lỗi nếu tôi không phải hỏi những câu hỏi tiếp theo - chỉ cần bỏ qua tôi nếu đó là nghi thức xấu. Khi tôi gõ mysql_config --socket, câu trả lời là '/tmp/mysql.sock' – erin

34

Tôi đã giải quyết được điều này bằng cách đặt máy chủ của tôi thành "127.0.0.1" thay vì "localhost".

+0

Bạn đã bao giờ tìm hiểu lý do tại sao điều này? Nó cũng làm việc cho tôi. – johnharris85

+7

Điều này làm việc vì khi bạn chỉ định 'localhost', nó cố gắng kết nối thông qua các khe cắm unix, trong khi khi bạn kết nối thông qua' 127.0.0.1' nó cố kết nối thông qua TCP/IP chuẩn. Tuy nhiên, nếu bạn chỉ định 'localhost', thì nó sẽ sử dụng'/tmp/mysql.sock' mặc định trừ khi bạn chỉ định cách khác. – daviewales

+1

F *** YA! Cảm ơn Matt. Tôi đã bị mắc kẹt trong 3 ngày này và bạn là giải pháp cuối cùng – IdeoREX

Các vấn đề liên quan