Tóm tắt: Cách sửa nhanhBạn đang gặp bế tắc với lỗi kết nối? Nếu bạn cần đưa ứng dụng hoạt động trở lại ngay lập tức, hãy chạy lệnh SQL sau trong cửa sổ dòng lệnh MySQL để bỏ qua sự không tương thích về giao thức:
ALTER USER 'your_username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;
Thay thế your_username và your_password bằng thông tin đăng nhập thực tế của bạn. Lệnh này chuyển phương thức xác thực của người dùng về định dạng cũ mà hầu hết mọi client đều hỗ trợ.
Tại sao lỗi này xảy raMySQL 8.0 đã thay đổi luật chơi. Nó chuyển phương thức xác thực mặc định từ mysql_native_password sang caching_sha2_password để tăng cường bảo mật và hiệu suất. Mặc dù đây là một tiêu chuẩn tốt hơn, các driver cũ đơn giản là không hiểu được ngôn ngữ mới này.
Lỗi ER_NOT_SUPPORTED_AUTH_MODE xảy ra khi một client—như gói mysql cũ của Node.js (v2.18.1 trở xuống) hoặc các phiên bản PHP cũ hơn 7.2.4—cố gắng kết nối. Client mong đợi một quy trình bắt tay truyền thống. Thay vào đó, server gửi một yêu cầu xác thực dựa trên SHA256 mà client không biết cách xử lý. Kết nối bị ngắt ngay lập tức.
Cách sửa 1: Áp dụng cho người dùng cụ thểGiải pháp chính xác nhất là chỉ thay đổi plugin cho tài khoản cụ thể mà ứng dụng của bạn sử dụng. Điều này giúp tránh làm giảm mức độ bảo mật cho toàn bộ máy chủ. Và trên hết? Bạn không cần phải khởi động lại dịch vụ.
- Truy cập vào MySQL shell:
mysql -u root -p- Cập nhật người dùng. Nếu người dùng của bạn là 'web_app' kết nối từ bất kỳ host nào ('%'):ALTER USER 'web_app'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongPassword123!';- Lưu các thay đổi:``` FLUSH PRIVILEGES;
### Lưu ý về bảo mật thông tin đăng nhậpPhương thức xác thực cũ kém an toàn hơn so với SHA2 mặc định mới, vì vậy độ mạnh của mật khẩu trở nên quan trọng hơn bao giờ hết. Tránh sử dụng các chuỗi ký tự đơn giản. Hãy sử dụng các công cụ như [Trình tạo mật khẩu ToolCraft](https://toolcraft.app/en/tools/security/password-generator) để tạo các khóa có độ ngẫu nhiên cao. Nó tạo ra các chuỗi bảo mật ngay tại trình duyệt của bạn, giúp giữ thông tin đăng nhập an toàn khỏi môi trường mạng trong quá trình khởi tạo.
## Cách sửa 2: Thay đổi cấu hình mặc định toàn cụcBạn đang quản lý hàng chục người dùng? Bạn có thể buộc MySQL sử dụng plugin cũ cho mọi người dùng **mới** được tạo kể từ bây giờ. Lưu ý rằng điều này sẽ không tự động sửa lỗi cho các người dùng đã tồn tại; bạn vẫn phải sử dụng lệnh `ALTER` thủ công cho họ.
- Mở tệp cấu hình (`my.cnf` trên Linux/macOS hoặc `my.ini` trên Windows).- Dưới mục `[mysqld]`, thêm dòng sau:```
[mysqld]
default_authentication_plugin=mysql_native_password
```- Khởi động lại dịch vụ để áp dụng:```
# Ubuntu/Debian
sudo systemctl restart mysql
# macOS (Homebrew)
brew services restart mysql
Kiểm tra kết quảKiểm tra lại bằng cách truy vấn bảng người dùng. Kết quả sẽ hiển thị chính xác plugin mà mỗi tài khoản đang sử dụng:
SELECT user, host, plugin FROM mysql.user;
Tìm mysql_native_password trong kết quả. Nếu nó vẫn hiển thị caching_sha2_password, hãy kiểm tra kỹ xem host trong lệnh ALTER USER có khớp chính xác không (ví dụ: 'root'@'localhost' khác với 'root'@'%').

