Lỗi mysqli::real_connect(): (HY000/2002): No such file or directory trong PHP thường liên quan đến một số vấn đề khi kết nối MySQL, đặc biệt là về cấu hình hoặc môi trường. Dưới đây là các nguyên nhân và cách khắc phục lỗi này:
1. Lỗi về cấu hình socket MySQL
Lỗi này có thể xảy ra nếu PHP không thể tìm thấy socket của MySQL. Điều này có thể do:- Đường dẫn đến socket trong PHP không chính xác.
- MySQL không sử dụng socket mà thay vào đó là kết nối TCP/IP.
- Kiểm tra lại cấu hình trong tệp php.ini. Tìm giá trị mysqli.default_socket và đảm bảo rằng nó trỏ đến đúng socket MySQL.
ini
Bash:pdo_mysql.default_socket = /tmp/mysql.sock mysqli.default_socket = /tmp/mysql.sock
- Nếu bạn đang sử dụng kết nối qua localhost, hãy thử thay thế localhost bằng 127.0.0.1 trong mã PHP. Điều này sẽ buộc MySQL sử dụng TCP/IP thay vì socket Unix:
Bash:$mysqli = new mysqli("127.0.0.1", "username", "password", "database");
2. MySQL không đang chạy
Nếu MySQL không chạy hoặc bị dừng lại, PHP sẽ không thể kết nối tới MySQL và gây ra lỗi này.Khắc phục:
- Kiểm tra trạng thái MySQL:
Bash:sudo systemctl status mysql
- Nếu MySQL không chạy, khởi động lại nó:
Bash:sudo systemctl start mysql
3. Lỗi về cấu hình trên môi trường máy chủ
Nếu bạn đang sử dụng máy chủ ảo hoặc Docker, có thể có vấn đề với cấu hình mạng hoặc tên máy chủ. Đảm bảo rằng PHP có thể truy cập được MySQL qua địa chỉ IP hoặc hostname đúng.4. Vấn đề với quyền truy cập
Lỗi này cũng có thể xảy ra nếu tài khoản MySQL bạn đang sử dụng không có quyền truy cập vào cơ sở dữ liệu từ địa chỉ bạn đang kết nối (localhost hoặc IP).Khắc phục:
- Đảm bảo rằng tài khoản MySQL có quyền truy cập từ đúng địa chỉ.
- Kiểm tra quyền truy cập bằng cách đăng nhập vào MySQL và sử dụng lệnh:
Bash:GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost'; FLUSH PRIVILEGES;
5. Đường dẫn sai hoặc tệp cấu hình không đúng
Nếu bạn sử dụng một tệp cấu hình tùy chỉnh cho MySQL hoặc PHP, hãy kiểm tra lại xem cấu hình có đúng không, đặc biệt là đường dẫn đến tệp socket của MySQL.Tóm lại:
- Sử dụng 127.0.0.1 thay vì localhost.
- Kiểm tra tệp cấu hình php.ini để đảm bảo đường dẫn socket đúng.
- Kiểm tra trạng thái của MySQL và đảm bảo nó đang chạy.
- Đảm bảo tài khoản MySQL có quyền truy cập từ địa chỉ của bạn.