Lỗi DROP USER khi host không khớp
Lỗi ERROR 1396 (HY000): Operation DROP USER failed for 'user'@'localhost' xảy ra khi user được tạo với host '%' (bất kỳ host nào) nhưng bạn cố gắng drop với host 'localhost'.
Nguyên nhân
MySQL phân biệt user theo cặp (user, host). 'Jack'@'%' và 'Jack'@'localhost' là 2 user khác nhau.
Minh họa
Tạo user với host %:
CREATE USER 'Jack'@'%' IDENTIFIED BY '1234';
Kiểm tra:
SELECT user, host FROM mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| Jack | % |
| ... | ... |
+------------------+-----------+
Drop sai host → LỖI:
DROP USER 'Jack'@'localhost';
-- ERROR 1396 (HY000): Operation DROP USER failed for 'Jack'@'localhost'
Drop đúng host → THÀNH CÔNG:
DROP USER 'Jack'@'%';
-- Query OK, 0 rows affected
Cách khắc phục
- Kiểm tra host thực của user:
SELECT user, host FROM mysql.user WHERE user = 'ten_user'; - DROP với đúng host tìm được.
- Nếu muốn user chỉ truy cập từ localhost:
CREATE USER 'Jack'@'localhost' IDENTIFIED BY '...';(tạo mới, không rename được host).
Mẹo: Drop nhiều host cùng lúc
DROP USER 'Jack'@'%', 'Jack'@'localhost', 'Jack'@'192.168.1.%';
Liên quan
RENAME USER 'Jack'@'%' TO 'Jack'@'localhost';(MySQL 5.7+) đổi host.SHOW GRANTS FOR 'Jack'@'%';xem quyền trước khi drop.