MySQL 5.6+ 安裝後不再預設空密碼,而是生成隨機初始密碼並寫入日誌(/var/log/mysqld.log 或 /root/.mysql_secret),若未記錄則無法登入。
systemctl stop mysqld 或 /etc/init.d/mysql stop。mysqld_safe --user=mysql --skip-grant-tables --skip-networking &--skip-networking 防止遠端連入,安全第一。mysql -u root(直接進入 mysql shell)。USE mysql;
UPDATE user SET authentication_string=PASSWORD('NewPass123') WHERE User='root' AND Host='localhost';
-- 5.7.6+ 欄位為 authentication_string,舊版為 Password
FLUSH PRIVILEGES;
QUIT;
mysqld_safe 進程,systemctl start mysqld。mysql -u root -pNewPass123。| 版本 | 密碼欄位 | 初始密碼位置 | FLUSH PRIVILEGES 必要性 |
|---|---|---|---|
| 5.6 | Password | 安裝輸出或 .mysql_secret | 是 |
| 5.7 | authentication_string | /var/log/mysqld.log(隨機生成) | 是 |
| 8.0 | authentication_string | /var/log/mysqld.log(隨機生成) | 是(且需 ALTER USER 'root'@'localhost' IDENTIFIED BY 'pwd';) |
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123';
FLUSH PRIVILEGES;
或啟動時加 --init-file=/tmp/reset.sql,檔案內容同上。
--skip-grant-tables 並重啟正常服務。DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1'); FLUSH PRIVILEGES;