Không thể kết nối với MySQL bằng 'localhost' nhưng sử dụng '127.0.0.1' thì không sao?


12

Tệp / etc / hosts của tôi trông như thế này:

127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Tôi đã tìm thấy trong khi xây dựng máy chủ, mặc dù tôi có thể ping localhost thành công, trong một số tệp cấu hình nhất định cho các dịch vụ như Postfix và Apache và Dovecot, tôi cần chỉ định 127.0.0.1thay vì localhostđể chúng hoạt động.

Tôi cũng cần phải thay đổi các tệp cấu hình của các trang web điều khiển cơ sở dữ liệu nhất định, được sử dụng localhostđể kết nối với MySQL.

Tôi đã thử các sửa đổi khác nhau cho hoststệp, nhưng cho đến nay tôi chưa thử được gì.

Máy chủ đang chạy Ubuntu 12.04.02 LTS. Nó không được cài đặt selinux và tình trạng trên vẫn còn ngay cả sau khi đặt các chính sách mặc định IPtables để chấp nhận và xóa chúng.

Câu trả lời:


15

Một điều bạn có thể kiểm tra là (yêu cầu bạn phải đăng nhập vào bảng điều khiển MySQL) - kiểm tra để đảm bảo rằng bạn có quyền đăng nhập rootthông qua localhost.

mysql -h 127.0.0.1 -u root -p

- Khi bạn đã đăng nhập thành công -

mysql> select user,host from mysql.user;
+------+--------------------------------+
| user | host                           |
+------+--------------------------------+
| root | 127.0.0.1                      | 
| root | ::1                            |
| root | localhost                      | <-- Make sure you have a localhost entry for root
+------+--------------------------------+
3 rows in set (0.00 sec)

Chỉ cần ném nó ra khỏi đó, chỉ trong trường hợp đây là vấn đề.


Tôi có cảm giác bạn đang đi đúng hướng. Tôi đã làm điều đó và tôi có thể thấy rằng mặc dù root và một vài người dùng khác đã được tạo cho localhost, những người được tạo bởi bảng điều khiển lưu trữ cho người dùng đều dành cho 127.0.0.1(ngoại trừ một người dùng %). Tôi nghĩ rằng điều này có thể tiết lộ đủ để tôi sửa nó, vì vậy tôi có thể sẽ chấp nhận câu trả lời của bạn trong thời gian ngắn.
Peter Snow

cảm ơn đã giúp đỡ! Tôi muốn thêm rằng cần phải khởi động lại máy chủ mysql sau khi cập nhật bảng mysql.user để thay đổi có ảnh hưởng.
thiếuovic10

Mặc dù được chấp nhận, đây không phải là vấn đề thường gặp (bao giờ?), Đối với mysql. Xem câu trả lời EEAA của thay (diễn giải mysql localhostnhư socketthay vì TCP).
ToolmakerSteve

8

Hầu hết các máy khách MySQL là kỳ lạ trong thực tế là nếu bạn chỉ định máy chủ là localhost, chúng sẽ đặt bí danh cho kết nối ổ cắm thay vì kết nối TCP. Các tùy chọn của bạn là gắn bó với 127.0.0.1hoặc, nếu máy khách hỗ trợ nó (như nhị phân mysql CLI thực hiện với --protocolcờ), buộc nó sử dụng TCP thay vì ổ cắm unix.


Cảm ơn EEAA. Vấn đề là những thứ như trình cài đặt Joomla thất bại. Nếu bạn chỉ định 127.0.0.1thay vì localhosttrong trường tên máy chủ trong khi cài đặt, điều đó sẽ khiến các đường dẫn cài đặt bị rối khiến tôi gặp các lỗi khác, nhưng chỉ định localhost không kết nối được cơ sở dữ liệu! Điều gì gây ra tình trạng này? Tại sao tôi có nó?
Peter Snow

3
@PeterSnow Thiết lập ổ cắm tên miền Unix trong cấu hình MySQL của bạn.
Michael Hampton

Cảm ơn @MichaelHampton Tôi đã tìm kiếm trong nửa giờ qua và không thể tìm thấy cách thiết lập này. Bạn có thể chỉ cho tôi một bài viết hoặc cho tôi một số ý tưởng xin vui lòng? Tôi có socket = /var/run/mysqld/mysqld.socktrong đó my.cnfvà tập tin đã tồn tại, thuộc sở hữu của mysql với quyền 777. Cảm ơn.
Peter Snow

@PeterSnow Bạn đã khởi động lại mysqld sau khi thực hiện thay đổi đó?
EEAA

Hiện tại tôi đang cố gắng sử dụng nó thông qua tập lệnh cài đặt Joomla. Trang http yêu cầu tên máy chủ. Nếu tôi chọn 127.0.0.1nó hoạt động (nhưng tập lệnh sử dụng mục nhập sau đó và thất bại vì nó mong muốn tên có thể phân giải được như thế localhost), nhưng nếu tôi sử dụng localhost, kết nối, để tạo cơ sở dữ liệu, sẽ thất bại.
Peter Snow


1

Bạn có thể kiểm tra sự cho phép như thế này:

[learner@localhost ~]$ sudo netstat -npa | grep mysqld  
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      6284/mysqld         
unix  2      [ ACC ]     STREAM     LISTENING     233040 6284/mysqld         /var/lib/mysql/mysql.sock

Nếu điều này đang lắng nghe vào 0 0.0.0.0:* thì có nghĩa là mọi người đều có thể truy cập mysql đó.

bạn có thể chỉnh sửa ràng buộc cho điều này trong tập tin my.conf. Trong đường dẫn mặc định của linux cho điều này là:

[learner@localhost ~]$ sudo vi /etc/my.cnf

Thêm các dòng này trong tệp my.conf để cho phép ip mà bạn muốn.

bind-address = 127.0.0.1   
bind-address = 0.0.0.0

Cảm ơn a_learner, vì thông tin, mặc dù tôi đã chấp nhận câu trả lời.
Peter Snow

0

PHP vẫn đang cố gắng sử dụng vị trí ổ cắm mặc định. Vấn đề này có thể xuất hiện nếu bạn đã di chuyển thư mục MariaDB / MySQL từ / var / lib / mysql sang vị trí khác. Để giải quyết vấn đề, bạn phải xác định vị trí của ổ cắm mới trong tệp /etc/php.ini .

mysqli.default_socket =/newDBLocation/mysql/mysql.sock

0

Tôi đã giải quyết vấn đề này bằng cách tạo symlink sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock. Nhưng trước tiên tôi phải tạo thư mục /var/run/mysqld/vì thư mục ban đầu không tồn tại.


-1

Bạn cần một mysql.sock trong / tmp

ln -s /var/lib/mysql/mysql.sock mysql.sock

nên làm việc tốt sau đó

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.