首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Linux 新裝 MySQL 設定 root 密碼後無法登入,跳過權限表重置密碼標準流程

     編輯:MySQL 綜合教學

現象重現

  1. yum install mysql-server 安裝完成。
  2. systemctl start mysqld 啟動成功。
  3. mysqladmin password '123' 設定密碼。
  4. 隨後 mysql -uroot -p 輸入 123 或空密碼均無法登入 (Access denied)。

原因分析

  • MySQL 5.7+ 預設安裝會產生隨機臨時密碼 (寫在 /var/log/mysqld.log),mysqladmin password 可能修改的是不同 Host 的帳號 (如 root@localhost vs root@127.0.0.1),導致實際登入使用的帳號密碼不符。
  • password 欄位在 5.7 改為 authentication_string,舊指令相容性存疑。

標準修復流程 (適用 5.7 / 8.0)

# 1. 停止服務
systemctl stop mysqld

# 2. 跳過權限表啟動 (背景、隔離網路)
mysqld_safe --skip-grant-tables --skip-networking &

# 3. 免密登入
mysql -u root

# 4. 重置密碼 (8.0 語法)
USE mysql;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass!23';
-- 若需開放遠端
CREATE USER 'root'@'%' IDENTIFIED BY 'NewStrongPass!23';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

# 5. 正常重啟
pkill mysqld
systemctl start mysqld

# 6. 驗證
mysql -uroot -p'NewStrongPass!23' -e "SELECT USER(), VERSION();"

一鍵安全初始化 (替代 mysql_secure_installation)

mysql -uroot -p'NewStrongPass!23' -e "
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1');
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
FLUSH PRIVILEGES;"

避坑提醒

  1. 新安裝 5.7/8.0 請直接看 /var/log/mysqld.log 臨時密碼,用 mysql --connect-expired-password 首次登入改密。
  2. mysqladmin password 僅修改 root@localhost,若透過 127.0.0.1 連線會失效。
  3. 生產環境禁止 root 遠端登入,建立專用應用帳號並限制 Host。
  4. 密碼複雜度:validate_password 元件預設啟用,需滿足長度、大小寫、數字、特殊字元。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved