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'
/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。