2009-11-24 8 views
5

Đã có câu hỏi tương tự trên StackOverflow về điều này, nhưng tôi đã không tìm thấy hoàn toàn tình huống tương tự. Đây là trên một máy OS X Leopard sử dụng MySQLWeird MySQL Python mod_wsgi Không thể kết nối với máy chủ MySQL trên 'localhost' (49) vấn đề

Một số thông tin bắt đầu:

MySQL Server version  5.1.30 
Apache/2.2.13 (Unix) 
Python 2.5.1 
mod_wsgi 3 

mysqladmin cũng đã skip-networking được liệt kê như OFF

Tôi có thể kết nối với mysql từ dòng lệnh python . Nhưng khi tôi cố gắng để làm điều đó thông qua mod_wsgi sử dụng mã số đó là sao chép và dán hoặc qua Django tôi nhận được từ chối kết nối chung

OperationalError: (2003, "Can't connect to MySQL server on 'localhost' (49)") 

Tôi đã nhìn vào hướng dẫn mysql và thử các mẹo gỡ rối của nó như

telnet localhost 3306 

và I làm nhận kết nối.

Tôi là không phải cũng cố gắng kết nối với tư cách gốc.

Bất kỳ ý tưởng nào về những gì khác tôi có thể kiểm tra? Cảm ơn bạn trước!

Trả lời

0

Không quá nhiều ở đó về điều này. Chỉ cần một đoán ngẫu nhiên nhưng hãy thử sử dụng:

DATABASE_HOST = 'localhost' thay vì 127.0.0.1

và/hoặc thử cho ý kiến ​​ra trong my.ini của bạn:

bind-address 127.0.0.1

đáng để chụp.

0

Bit lẻ khi kết nối telnet hoạt động. Có thể một số cách khác để gặp sự cố khi quay:

shell> perror 49 
OS error code 49: Can't assign requested address 

Tôi sẽ kiểm tra giao diện cục bộ trước tiên, kiểm tra xem địa chỉ IPv4 có nằm trong địa chỉ IPv4 hay không. Viễn có thể lấy được, nhưng tôi đã gặp rắc rối khi tôi đã kích hoạt IPv6.

shell> ifconfig lo0 

Có lẽ độ phân giải tên không hoạt động một cách chính xác từ bên trong Apache/mod_wsgi/etc ..

import python 
print socket.gethostbyname('localhost') 
print socket.gethostbyaddr('127.0.0.1') 

Có lẽ để giúp bạn đi (cái gì tôi đóng góp cho Django) thử Socket UNIX trong Django , nó hoạt động đặt máy chủ lưu trữ cơ sở dữ liệu thành đường dẫn (bắt đầu bằng dấu gạch chéo):

DATABASE_HOST = '/tmp/mysql.sock' 

Hoặc nơi tệp ổ cắm của bạn ở đâu.

Cuối cùng, hãy kiểm tra nhật ký lỗi MySQL nếu có bất kỳ thông báo lạ nào, như không liên kết trên địa chỉ IP hoặc cổng.

Hy vọng điều này sẽ giúp ích một chút.

10

Tôi đã gặp lỗi này và đó là do từ chối SELinux./ usr/bin/httpd không có quyền kết nối với cổng 3306. Tôi đã khắc phục vấn đề với:

setsebool httpd_can_network_connect_db on 

Dường như hoạt động tốt và an toàn hơn là tắt SELinux. Như Avinash Meetoo chỉ ra bên dưới, bạn có thể sử dụng:

setsebool -P httpd_can_network_connect_db 

Để thay đổi selinux tồn tại trong quá trình khởi động lại.

+1

Cảm ơn rất nhiều. Tôi đang sử dụng MySQL trên CentOS Linux 6 với SELinux chạy trong chế độ Enforcing. Setsebool đã giải quyết vấn đề một cách hoàn hảo. –

+0

'setsebool -P httpd_can_network_connect_db on' thậm chí còn tốt hơn vì nó liên tục. Không có '-P', setsebool không tồn tại trong quá trình khởi động lại. –

1

tôi đã nhận được thông báo lỗi tương tự chính xác trong Django:

OperationalError: (2003, "Can't connect to MySQL server on 'localhost' (49)") 

Để khắc phục nó, tôi đã phải thiết lập một cách rõ ràng cổng mysql để 3306 trong tập tin cài đặt django.