ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
密碼確定正確,-h 127.0.0.1 卻能登入,說明 mysql.user 表缺少 Host='localhost' 的 root 記錄。
MySQL 將 localhost (Unix Socket) 與 127.0.0.1 (TCP) 視為不同 Host。初始化腳本若未建立 root@localhost,本地 Socket 連線即被拒。% 萬用字元在某些版本 (5.1+) 不匹配 localhost。
systemctl stop mysqld / net stop mysqlmysqld_safe --skip-grant-tables & / mysqld-nt --skip-grant-tablesmysqlUSE mysql;
-- 方案 A:將現有 % 或 hostname 記錄改為 localhost
UPDATE user SET Host='localhost' WHERE User='root' AND Host='%';
-- 方案 B:直接插入 (若無可改記錄)
INSERT INTO user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv, Create_view_priv, Show_view_priv, Create_routine_priv, Alter_routine_priv, Create_user_priv, Event_priv, Trigger_priv, ssl_type, ssl_cipher, x509_issuer, x509_subject, max_questions, max_updates, max_connections, max_user_connections, plugin, authentication_string)
VALUES ('localhost','root','*HASH','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','*HASH');
FLUSH PRIVILEGES;
mysql -u root -pSELECT User, Host, plugin, authentication_string FROM mysql.user WHERE User='root';
確保包含 localhost、127.0.0.1、% (視需求) 三條記錄。
authentication_string,8.0 建議用 ALTER USER 'root'@'localhost' IDENTIFIED BY 'pwd';FLUSH PRIVILEGES; 否則不生效localhost 與 127.0.0.1,移除 %