2010-08-26 39 views
17

tôi cố gắng tạo ra một đường hầm SSH sử dụngSSH Tunnel cho Python MySQLdb kết nối

ssh -L 3306:localhost:22 <hostip> 

Sau đó chạy script python của tôi để kết nối qua localhost

conn = MySQLdb.connect(host'localhost', port=3306, user='bob', passwd='na', db='test') 

Tuy nhiên, tôi nhận được lỗi sau

(2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)") 

Làm cách nào để đảm bảo rằng tôi đang nhấn đúng máy chủ và không chỉ là một số vấn đề với liên kết?

Trả lời

16

Hãy thử thay đổi "localhost" thành "127.0.0.1", nó sẽ hoạt động như bạn mong đợi. Hành vi này được trình bày chi tiết trong manual:

UNIX socket và đường ống được đặt tên không làm việc qua mạng, vì vậy nếu bạn chỉ định một host khác hơn là localhost, TCP sẽ được sử dụng, và bạn có thể chỉ định một lẻ cổng nếu bạn cần (cổng mặc định là 3306):

db=_mysql.connect(host="outhouse", port=3307, passwd="moonpie", db="thangs")

Nếu bạn thực sự phải, bạn có thể kết nối với các máy chủ địa phương với TCP bởi chỉ định tên máy chủ đầy đủ hoặc 127.0.0.1.

+1

Điều đó đã xảy ra. Cảm ơn –

3

Bạn không thể chỉ định localhost làm tên máy chủ, vì điều này gợi ý rằng MySQLdb nên cố gắng sử dụng ổ cắm UNIX. Sử dụng 127.0.0.1 cho máy chủ lưu trữ thay thế.

Nếu bạn muốn đảm bảo kết nối hoạt động, bạn có thể sử dụng ứng dụng khách mysql chuẩn.

11

Liệu mysqld có chạy trên cổng 22 trên điều khiển từ xa không? Hãy gọi cho tôi ngu dốt nhưng tôi nghĩ rằng những gì bạn đang cố gắng làm là

ssh -n -N -f -L 3306:localhost:3306 remotehost 

Sau đó làm cho các kết nối MySQL trên máy tính địa phương sẽ minh bạch được tạo đường hầm qua đến host mục tiêu.

+0

Có, và bạn có thể kiểm tra nó nếu bạn có máy khách telnet có sẵn trên máy chủ cục bộ: 'telnet localhost 3306' sẽ thiết lập kết nối và hiển thị số phiên bản MySQL có thể nhận biết được. –

+0

Bạn đã đúng với giả định rằng tôi đã có cổng sai. –

+0

Tôi nghĩ câu trả lời này tốt hơn câu trả lời được chọn, bởi vì cách đề xuất làm cho nó có thể ở trên máy cục bộ của bạn thay vì ở xa. –

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