mysql -uroot -p
SHOW DATABASES; -- 之前建的庫不見了
CREATE DATABASE user;
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'user'
''@'localhost' 匿名帳號,權限極低。若 root 登入時未正確匹配 root@localhost,可能被當成匿名用戶。mysql.user 表中 root 權限異常,或 FLUSH PRIVILEGES 未執行。data 目錄下有資料夾但 information_schema 未同步。# 1. 停止服務
sudo systemctl stop mysqld
# 2. 跳過授權表啟動 (免密、全權限)
sudo mysqld_safe --skip-grant-tables --skip-networking &
# 3. 新終端免密登入
mysql -u root
# 4. 修復 root 權限
USE mysql;
-- 刪除匿名用戶
DELETE FROM user WHERE User='';
-- 確保 root@localhost 存在且密碼正確
UPDATE user SET authentication_string=PASSWORD('新密碼'), plugin='mysql_native_password' WHERE User='root' AND Host='localhost';
-- 授予所有權限
UPDATE user SET Select_priv='Y', Insert_priv='Y', Update_priv='Y', Delete_priv='Y', Create_priv='Y', Drop_priv='Y', Reload_priv='Y', Shutdown_priv='Y', Process_priv='Y', File_priv='Y', Grant_priv='Y', References_priv='Y', Index_priv='Y', Alter_priv='Y', Show_db_priv='Y', Super_priv='Y', Create_tmp_table_priv='Y', Lock_tables_priv='Y', Execute_priv='Y', Repl_slave_priv='Y', Repl_client_priv='Y', Create_view_priv='Y', Show_view_priv='Y', Create_routine_priv='Y', Alter_routine_priv='Y', Create_user_priv='Y', Event_priv='Y', Trigger_priv='Y', Create_tablespace_priv='Y' WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
EXIT;
# 5. 正常重啟
sudo pkill mysqld_safe
sudo systemctl start mysqld
# 6. 驗證
mysql -uroot -p新密碼 -e "SHOW DATABASES; CREATE DATABASE testdb;"
MySQL 服務。mysqld --skip-grant-tables --skip-networking (保持視窗開啟)。mysql -u root 免密進入,執行上述 SQL 修復。FLUSH PRIVILEGES: 修改 mysql.user 表後必須刷新,否則修改不生效。mysql_secure_installation:刪匿名用戶、禁用 root 遠程登入、移除 test 資料庫。mysql 系統庫 (含 user、db、tables_priv 等權限表)。「Access denied for user ''@'localhost'」經典錯誤,本質是 匿名用戶搶佔連線 或 root 權限表異常。透過 --skip-grant-tables 進入維護模式,清理匿名用戶、重設 root 密碼與權限、FLUSH PRIVILEGES 即可徹底解決。