2012-04-27 82 views
10

Với đoạn mã sau tôi có thể kết nối với mysql: mysql_connect("localhost","username","");không thể kết nối với mysql với 127.0.0.1

Nhưng nếu tôi thay đổi localhost để 127.0.0.1 tôi nhận được lỗi sau:

không thể kết nối với MySQL máy chủ trên '127.0.0.1' (13)

Tại sao nó không hoạt động với 127.0.0.1?

+0

này phải là một "Permission denied" vấn đề. –

+0

Bạn đang sử dụng nền tảng nào, cửa sổ hoặc unix? –

+0

@ Jürgen Thelen - Tại sao phải không? – Quentin

Trả lời

19

localhost là vỏ bọc đặc biệt và sử dụng ổ cắm UNIX thay vì TCP/IP. 127.0.0.1 không nhận được sự xử lý đặc biệt đó.

Xem the documentation:

On Unix, MySQL programs treat the host name localhost specially, in a way that is likely different from what you expect compared to other network-based programs. For connections to localhost, MySQL programs attempt to connect to the local server by using a Unix socket file. This occurs even if a --port or -P option is given to specify a port number. To ensure that the client makes a TCP/IP connection to the local server, use --host or -h to specify a host name value of 127.0.0.1, or the IP address or name of the local server. You can also specify the connection protocol explicitly, even for localhost, by using the --protocol=TCP option.

Nếu nó không hoạt động khi bạn sử dụng giao thức TCP/IP sau đó cơ sở dữ liệu có thể không được lắng nghe trên mạng. Điều này nói chung là một điều tốt vì nó tăng cường bảo mật (không phải là lắng nghe trên 127.0.0.1 cho thấy bất kỳ vấn đề nào, nhưng việc lắng nghe trên tất cả các giao diện mang lại nhiều cơ hội hơn cho các cuộc tấn công).

Nếu bạn thực sự muốn cho phép kết nối qua mạng, hãy xem skip-networking.

1

bạn có mục nhập trong ánh xạ tệp máy chủ 127.0.0.7 đến máy chủ cục bộ không?

0

Bạn có nhiều hơn 1 máy chủ mysql được cài đặt/chạy trên hệ thống của mình không? Nếu vậy, vui lòng chỉ định số cổng của máy chủ mysql mà bạn đang cố gắng truy cập như 127.0.0.1:3306,127.0.0.1:8889, v.v.

Nếu bạn không biết liệu có bất kỳ trường hợp máy chủ mysql nào khác đang chạy hay không hệ thống của bạn cũng có, vui lòng chỉ định cổng.

+0

Việc chạy một phiên bản MySQL thứ hai có ngăn không cho người đầu tiên chạy trên cổng mặc định ngay bây giờ không? – Quentin

+0

Không, nó không ngăn cản chạy nhưng nó có thể không thể truy cập vào máy chủ mysql mà không đề cập đến số cổng ngay cả khi nó đang chạy trên cổng mặc định khi nhiều hơn 1 thể hiện đang chạy – ilight

0

Bạn sẽ có thể truy cập vào nó khi bạn thêm các đặc quyền cho 'root'@'127.0.0.1' trong bảng "USER_PRIVILEGES" trong "information_schema" cơ sở dữ liệu

+0

No. là "Truy cập bị từ chối cho người dùng", không phải "không thể kết nối" – Quentin

0

Bạn cũng có thể thử vô hiệu hóa SELinux

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