首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 5.6「You must SET PASSWORD before executing this statement」錯誤解決方案

     編輯:MySQL 資料庫相關知識

錯誤現象

mysql> CREATE DATABASE testdb;
ERROR 1820 (HY000): You must SET PASSWORD before executing this statement

即使已用密碼登錄,仍提示必須先設置密碼。常見於 MySQL 5.6 全新安裝後,root 賬戶密碼為空或被標記為「需重置」。

根本原因

MySQL 5.6 引入 password_expired 標記,初始化時 root 密碼為空並標記為過期,必須執行 SET PASSWORD 重置後方可執行 DDL/DML。

解決方法

方法一:登錄後直接重置(推薦)

mysql> SET PASSWORD = PASSWORD('NewPass123');
Query OK, 0 rows affected (0.03 sec)

mysql> CREATE DATABASE testdb;
Query OK, 1 row affected (0.00 sec)

方法二:跳過授權表重置(忘記密碼時)

# 1. 停止服務
systemctl stop mysqld

# 2. 跳過授權啟動
mysqld_safe --skip-grant-tables --skip-networking &

# 3. 無密登錄修改
mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('NewPass123') WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> QUIT;

# 4. 正常重啟
systemctl restart mysqld
mysql -u root -p'NewPass123'

方法三:mysql_secure_installation 交互式向導

/usr/local/mysql/bin/mysql_secure_installation
# 會提示設置 root 密碼、移除匿名用戶、禁止遠程 root、刪除 test 庫等

驗證

mysql> SHOW VARIABLES LIKE 'validate_password%';  -- 5.6.6+ 支援密碼策略插件
mysql> SELECT User, Host, Password FROM mysql.user WHERE User='root';

確認 Password 列非空、password_expired 為 N。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved