MySQL 5.0 年代版本雖已停止維護,但部分舊系統仍在運行。本文彙總 Windows 與 Linux 下針對 MySQL 5.0 的 Root 密碼重置方法,涵蓋 --init-file、--skip-grant-tables、服務管理等實戰技巧。
--init-file 自動執行 SQL (最乾淨、適合自動化)reset_root.sql:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123';
FLUSH PRIVILEGES;
MySQL 5.0 不支援 ALTER USER,改用:
UPDATE mysql.user SET Password=PASSWORD('NewPass123') WHERE User='root';
FLUSH PRIVILEGES;
net stop mysql (Win) / service mysql stop (Linux)。# Windows
mysqld-nt --init-file=C:\reset_root.sql
# Linux
mysqld_safe --init-file=/root/reset_root.sql &
ready for connections 後 Ctrl+C 停止,正常啟動服務。--skip-grant-tables 手動修改 (通用、直觀)net stop mysqlmysqld-nt --skip-grant-tables (保持開啟)。mysql -u root mysql
UPDATE user SET Password=PASSWORD('NewPass123') WHERE User='root';
FLUSH PRIVILEGES;
QUIT;
net start mysql。service mysql stopmysqld_safe --skip-grant-tables &mysql -u root mysql 執行相同 UPDATE/FLUSH。pkill mysqld,service mysql start。systemctl edit mysqld
# [Service]
# ExecStart=
# ExecStart=/usr/sbin/mysqld --skip-grant-tables --skip-networking
systemctl daemon-reload && systemctl restart mysqld
# mysql -u root 執行 UPDATE/FLUSH
systemctl revert mysqld && systemctl daemon-reload && systemctl restart mysqld
PASSWORD() 產出 16 字元,5.6+ 客戶端預設拒絕。若需相容新客戶端,重置後必須 SET PASSWORD = PASSWORD('...') 產生新版 41 字元雜湊,或客戶端加 --secure-auth=0。mysql、mysqld、mysql5:用 chkconfig --list 或 systemctl list-unit-files | grep mysql 確認。/var/lib/mysql,socket /var/lib/mysql/mysql.sock:客戶端連線若報 socket 錯誤,指定 --socket 或建立軟連結 ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock。mysql -u root -p'NewPass123' -e "SELECT VERSION();" 登入成功。SELECT User, Host, Password FROM mysql.user WHERE User='root'; 確認雜湊已更新 (41 字元)。MySQL 5.0 於 2012 年結束生命週期 (EOL),**強烈建議規劃升級至 5.7/8.0 或 MariaDB 10.x** 以獲得安全補丁、效能提升、新功能 (JSON、CTE、窗口函數)。升級路徑:5.0 → 5.1 → 5.5 → 5.6 → 5.7 → 8.0 (逐版 mysql_upgrade)。