以 --skip-grant-tables 啟動 mysqld,暫時停用權限驗證,免密登入 root,更新 mysql.user 密碼欄位,重啟服務生效。
net stop mysqlcd C:\Program Files\MySQL\MySQL Server 5.x\binmysqld --skip-grant-tables (或 mysqld-nt.exe --skip-grant-tables)mysql -u rootPassword、5.7+ authentication_string):USE mysql;
-- 5.7 前
UPDATE user SET Password=PASSWORD('NewPass123') WHERE User='root';
-- 5.7+ (8.0 同)
UPDATE user SET authentication_string=PASSWORD('NewPass123') WHERE User='root';
-- 或 8.0.4+ 推薦
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123';
FLUSH PRIVILEGES;
EXIT;
net start mysqlmysql -u root -pNewPass123systemctl stop mysqld 或 service mysql stopmkdir -p /var/run/mysqld; chown mysql:mysql /var/run/mysqldmysqld --skip-grant-tables --user=mysql --datadir=/var/lib/mysql --socket=/var/run/mysqld/mysqld.sock &mysql -u root --socket=/var/run/mysqld/mysqld.sockkillall mysqld 或 pkill -f "skip-grant-tables"systemctl start mysqld直接用 mysqld --skip-grant-tables,注意 --user=mysql 與 --datadir 指定正確。
SELECT User, Host, plugin, authentication_string FROM mysql.user WHERE User='root';
plugin:caching_sha2_password (8.0 預設) / mysql_native_password。authentication_string 非空。