Linux 安裝 MySQL 後,跳過授權表啟動(mysqld_safe --skip-grant-tables)發現 mysql.user 表為空,無 root 使用者,導致正常啟動後無法登入。
初始化腳本未正確建立授權表,或權限資料損毀,導致 user 表無預設 root 帳號。
-- 1. 跳過授權表啟動
mysqld_safe --skip-grant-tables &
mysql -uroot mysql
-- 2. 確認 user 表為空
SELECT * FROM user; -- Empty set
-- 3. 手動插入 root 使用者(MySQL 5.7+ 欄位數較多,需對應版本結構)
-- 以下為典型 5.6/5.7 相容寫法,實際請依 DESC user 調整欄位順序與數量
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,
Create_tablespace_priv, ssl_type, ssl_cipher, x509_issuer, x509_subject,
max_questions, max_updates, max_connections, max_user_connections,
plugin, authentication_string, password_expired
) VALUES (
'%', 'root', PASSWORD('MY_PASSWORD'),
'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', '', 'N'
);
-- 4. 刷新權限並重啟
FLUSH PRIVILEGES;
-- 結束 skip-grant-tables 進程,正常啟動 MySQL 服務
PASSWORD('明文') 加密,MySQL 不儲存明文密碼'Y' 代表授權,'N' 或空值為拒絕mysql_native_password正常啟動 MySQL 後,使用 mysql -uroot -pMY_PASSWORD 登入測試。