引言
在linux可能存在安裝mysql安裝失敗,一直不出現默認密碼
/usr/local/mysql/mysql-8.0.26/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql --basedir=/usr/local/mysql/mysql-8.0.26 --datadir=/usr/local/mysql/mysql-8.0.26/data --lower-case-table-names=1 --initialize
一,可能存在下面情況:
1. 初始化未成功執行
如果你之前運行過 --initialize
命令但失敗了(比如“data 目錄不可用”),那么數據庫里可能根本沒有生成 root 用戶和密碼。
2. 忘記臨時密碼
MySQL 初始化時會生成一個臨時密碼并輸出到控制臺或日志文件。如果你當時沒記錄下來,又嘗試使用錯誤的密碼登錄,就會出現這個錯誤。
3. 已經設置過 root 密碼
如果你曾經修改過 root 密碼,而現在忘記了,也會導致登錄失敗。
二,重置 MySQL root 密碼
要解決這個問題,我們需要以“跳過權限驗證”的方式啟動 MySQL,然后手動修改 root 用戶的密碼。
步驟一:停止 MySQL(如果正在運行)
pkill mysqld
確認是否還有進程在運行:
ps aux | grep mysqld
如果有殘留進程,使用 kill PID
殺掉它們。
步驟二:以 skip-grant-tables 模式啟動 MySQL
/usr/local/mysql/mysql-8.0.26/bin/mysqld \--user=mysql \--basedir=/usr/local/mysql/mysql-8.0.26 \--datadir=/usr/local/mysql/mysql-8.0.26/data \--skip-grant-tables &
這個模式下不需要密碼即可登錄,并且可以修改用戶權限。
風險
- 跳過權限驗證:意味著任何能訪問數據庫的人,都可以無密碼登錄并執行任意 SQL。
- 數據安全隱患:如果服務器暴露在公網或多人共享環境,可能導致數據被篡改或刪除。
- 違反最小權限原則:不符合企業級系統安全管理規范。
步驟三:無密碼登錄 MySQL
/usr/local/mysql/mysql-8.0.26/bin/mysql -u root
這時你應該可以直接進入 MySQL shell,不需要輸入密碼。
步驟四:修改 root 用戶密碼
進入 MySQL 后,依次執行以下命令:
FLUSH PRIVILEGES;ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密碼';exit;
替換 '你的新密碼'
為你想設置的新密碼。
步驟五:正常重啟 MySQL
退出后,關閉當前的“免密模式”實例:
pkill mysqld
再以正常模式啟動 MySQL:
/usr/local/mysql/mysql-8.0.26/bin/mysqld_safe --user=mysql &
或者使用 systemd(如果你已配置):
systemctl start mysql
步驟六:測試新密碼登錄
/usr/local/mysql/mysql-8.0.26/bin/mysql -u root -p
輸入你剛才設置的新密碼,應該就能成功登錄了!
三,額外建議
查看初始化時生成的臨時密碼(可選)
如果你不確定初始化是否成功,可以查看 MySQL 日志文件(如 /usr/local/mysql/mysql-8.0.26/log/mysql.log
)中是否有類似下面的內容:
A temporary password is generated for root@localhost: Abc123!@#def
設置開機自啟(推薦)
將 MySQL 加入 systemd
管理,方便開機自啟和日常維護。請參照 項目上線(若依前后分離版)
四,總結一句話
出現 “Access denied for user ‘root’@‘localhost’” 錯誤,通常是因為密碼錯誤或初始化失敗。可以通過
--skip-grant-tables
模式重置 root 密碼來解決。在實際生產中,要
開始加水了!!!