最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中root用戶密碼管理的三種場(chǎng)景完全指南

 更新時(shí)間:2026年02月24日 08:56:21   作者:Seal^_^  
在MySQL數(shù)據(jù)庫(kù)的日常運(yùn)維中,root用戶密碼管理是最基礎(chǔ)也最重要的操作之一,本文將針對(duì)三種常見(jiàn)場(chǎng)景,分別給出詳細(xì)的操作步驟,涵蓋MySQL?5.6、5.7、8.0三個(gè)主流版本,感興趣的小伙伴可以了解下

引言

在MySQL數(shù)據(jù)庫(kù)的日常運(yùn)維中,root用戶密碼管理是最基礎(chǔ)也最重要的操作之一。無(wú)論是剛部署完MySQL需要設(shè)置初始密碼,還是定期更新密碼,抑或是悲劇地忘記了密碼,都需要我們熟練掌握相應(yīng)的操作技巧。

本文將針對(duì)三種常見(jiàn)場(chǎng)景,分別給出詳細(xì)的操作步驟,涵蓋MySQL 5.6、5.7、8.0三個(gè)主流版本。

場(chǎng)景一:首次部署MySQL,設(shè)置root用戶密碼

方式一:在初始化數(shù)據(jù)庫(kù)時(shí)設(shè)置

MySQL提供了兩種初始化方式,區(qū)別在于是否生成隨機(jī)臨時(shí)密碼。

1.--initialize方式(生成隨機(jī)臨時(shí)密碼)

# 初始化數(shù)據(jù)庫(kù),生成隨機(jī)臨時(shí)密碼
mysqld --initialize \
  --user=mysql \
  --datadir=/data/3306/data \
  --basedir=/usr/local/mysql

# 查看生成的臨時(shí)密碼
grep 'temporary password' /var/log/mysqld.log
# 輸出示例: 2025-10-28T07:25:16.184768Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: >hq2L?wzR8x

特點(diǎn)

  • 安全性高:生成復(fù)雜隨機(jī)密碼
  • 符合安全規(guī)范:首次登錄必須修改密碼
  • 需要從日志中查找密碼

首次登錄

# 使用臨時(shí)密碼登錄
mysql -uroot -p
# 輸入臨時(shí)密碼: >hq2L?wzR8x

# MySQL會(huì)強(qiáng)制要求修改密碼
mysql> ALTER USER root@'localhost' IDENTIFIED BY 'NewPassword123!';

2.--initialize-insecure方式(空密碼)

# 初始化數(shù)據(jù)庫(kù),root用戶無(wú)密碼
mysqld --initialize-insecure \
  --user=mysql \
  --datadir=/data/3306/data \
  --basedir=/usr/local/mysql

# 直接登錄(無(wú)需密碼)
mysql -uroot

特點(diǎn)

  • 方便開(kāi)發(fā)環(huán)境搭建
  • 安全性低,生產(chǎn)環(huán)境不推薦
  • 需要立即設(shè)置密碼

方式二:手動(dòng)設(shè)置密碼

如果初始化時(shí)使用了空密碼,或者需要修改初始密碼,可以使用以下方法:

MySQL 8.0版本

# 方法1:使用mysqladmin命令
mysqladmin -uroot password 'NewPassword123!'

# 方法2:登錄后執(zhí)行ALTER語(yǔ)句
mysql -uroot

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123!';
Query OK, 0 rows affected (0.01 sec)

MySQL 5.7版本

# 方法1:使用mysqladmin命令
mysqladmin -uroot password 'NewPassword123!'

# 方法2:登錄后執(zhí)行ALTER語(yǔ)句
mysql -uroot

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123!';
Query OK, 0 rows affected (0.01 sec)

MySQL 5.6版本

-- 5.6版本使用PASSWORD()函數(shù)
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewPassword123!');
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

場(chǎng)景二:已知root用戶密碼,修改root用戶密碼

MySQL 8.0版本

# 方法1:使用mysqladmin命令(交互式輸入密碼)
mysqladmin -uroot -p password 'NewPassword456!'
Enter password: 輸入舊密碼

# 方法2:登錄后修改
mysql -uroot -p
Enter password: 輸入舊密碼

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword456!';
Query OK, 0 rows affected (0.01 sec)

MySQL 5.7版本

-- 登錄后修改(5.7版本)
mysql -uroot -p
Enter password: 輸入舊密碼

mysql> UPDATE mysql.user 
       SET authentication_string = PASSWORD('NewPassword456!') 
       WHERE user = 'root' AND host = 'localhost';
Query OK, 1 row affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

MySQL 5.6版本

-- 登錄后修改(5.6版本)
mysql -uroot -p
Enter password: 輸入舊密碼

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewPassword456!');
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

各版本密碼修改方式對(duì)比

版本密碼字段設(shè)置密碼方式是否需FLUSH
MySQL 8.0authentication_stringALTER USER
MySQL 5.7authentication_stringUPDATE + PASSWORD()
MySQL 5.6passwordSET PASSWORD + PASSWORD()

場(chǎng)景三:忘記root密碼,需重置root用戶密碼

這是最麻煩但也最常見(jiàn)的場(chǎng)景。別慌,按照以下步驟操作即可。

步驟一:關(guān)閉數(shù)據(jù)庫(kù)服務(wù)

# 查看MySQL進(jìn)程
[root@master ~]# ps -ef | grep mysql
root      12345      1  0 10:30 ?        00:00:00 /usr/sbin/mysqld

# 關(guān)閉MySQL服務(wù)(根據(jù)安裝方式選擇)
[root@master ~]# systemctl stop mysqld
# 或
[root@master ~]# /etc/init.d/mysqld stop
# 或
[root@master ~]# service mysql stop

# 確認(rèn)已關(guān)閉
[root@master ~]# ps -ef | grep mysql
root     4070896 4068830  0 15:24 pts/0    00:00:00 grep mysql

步驟二:采用安全模式啟動(dòng)數(shù)據(jù)庫(kù)

# 使用mysqld_safe啟動(dòng),跳過(guò)授權(quán)表,禁用網(wǎng)絡(luò)
[root@master ~]# mysqld_safe --skip-grant-tables --skip-networking &
[1] 4071155

# 輸出信息
2025-10-28T07:25:16.184768Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2025-10-28T07:25:16.211299Z mysqld_safe Starting mysqld daemon with databases from /data00/data/mysql

參數(shù)說(shuō)明

  • --skip-grant-tables:跳過(guò)權(quán)限表驗(yàn)證,可以免密登錄
  • --skip-networking:禁用網(wǎng)絡(luò)連接,防止其他主機(jī)連接(安全考慮)
  • &:后臺(tái)運(yùn)行

步驟三:進(jìn)入數(shù)據(jù)庫(kù)修改密碼

# 免密登錄(無(wú)需密碼)
[root@master ~]# mysql -uroot

# 重要:先刷新權(quán)限,使授權(quán)表生效
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

# 根據(jù)MySQL版本選擇相應(yīng)命令

MySQL 8.0版本修改密碼

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'huangsir';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

MySQL 5.7版本修改密碼

mysql> UPDATE mysql.user 
       SET authentication_string = PASSWORD('huangsir') 
       WHERE user = 'root' AND host = 'localhost';
Query OK, 1 row affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

MySQL 5.6版本修改密碼

mysql> UPDATE mysql.user 
       SET password = PASSWORD('huangsir') 
       WHERE user = 'root' AND host = 'localhost';
Query OK, 1 row affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

步驟四:恢復(fù)數(shù)據(jù)庫(kù)服務(wù)正常啟動(dòng)

# 退出MySQL
mysql> exit
Bye

# 殺掉mysqld_safe進(jìn)程
[root@master ~]# pkill mysql
[root@master ~]# pkill mysqld_safe

# 確認(rèn)進(jìn)程已全部殺掉
[root@master ~]# ps -ef | grep mysql
root     4072026 4068830  0 15:29 pts/0    00:00:00 grep mysql

# 正常啟動(dòng)MySQL
[root@master ~]# systemctl start mysqld
# 或
[root@master ~]# /etc/init.d/mysqld start
Starting mysqld (via systemctl): mysqld.service.

步驟五:測(cè)試連接

# 使用新密碼測(cè)試登錄
[root@master ~]# mysql -uroot -phuangsir
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.26 MySQL Community Server - GPL

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT USER(), CURRENT_USER();
+----------------+----------------+
| USER()         | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
1 row in set (0.00 sec)

mysql>

補(bǔ)充知識(shí):FLUSH PRIVILEGES的作用

什么時(shí)候需要執(zhí)行FLUSH PRIVILEGES?

FLUSH PRIVILEGES的兩個(gè)作用

  • 將內(nèi)存中的權(quán)限數(shù)據(jù)落盤:將對(duì)授權(quán)表的修改從內(nèi)存同步到磁盤
  • 重新加載權(quán)限表:將磁盤中的權(quán)限數(shù)據(jù)重新加載到內(nèi)存
-- 場(chǎng)景1:直接操作mysql.user表后,需要刷新
UPDATE mysql.user SET ...;
FLUSH PRIVILEGES;  -- 必須執(zhí)行

-- 場(chǎng)景2:使用ALTER USER修改密碼,不需要刷新
ALTER USER ...;    -- 自動(dòng)生效,無(wú)需FLUSH

-- 場(chǎng)景3:使用GRANT授權(quán),不需要刷新
GRANT SELECT ON *.* TO 'user'@'%';  -- 自動(dòng)生效

各版本密碼管理命令速查表

操作場(chǎng)景MySQL 8.0MySQL 5.7MySQL 5.6
首次設(shè)置密碼ALTER USER ...ALTER USER ...SET PASSWORD ...
修改已知密碼ALTER USER ...UPDATE mysql.user ...SET PASSWORD ...
忘記密碼重置ALTER USER ...UPDATE ... SET authentication_stringUPDATE ... SET password
是否需要FLUSH? 不需要? 需要(UPDATE后)? 需要(UPDATE后)

常見(jiàn)問(wèn)題與注意事項(xiàng)

1. 密碼復(fù)雜度要求

MySQL 8.0/5.7默認(rèn)啟用了密碼復(fù)雜度驗(yàn)證插件:

-- 查看密碼策略
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length              | 8      |
| validate_password.mixed_case_count    | 1      |
| validate_password.number_count        | 1      |
| validate_password.policy              | MEDIUM |
| validate_password.special_char_count  | 1      |
+--------------------------------------+--------+

如果密碼太簡(jiǎn)單會(huì)報(bào)錯(cuò):

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

解決方案:設(shè)置符合要求的密碼(至少8位,包含大小寫(xiě)字母、數(shù)字、特殊字符)

2. 安全模式啟動(dòng)失敗

# 如果mysqld_safe啟動(dòng)失敗,檢查錯(cuò)誤日志
tail -f /var/log/mysql/error.log

# 常見(jiàn)問(wèn)題:數(shù)據(jù)目錄權(quán)限不對(duì)
chown -R mysql:mysql /data00/data/mysql

3. 8.0版本PASSWORD()函數(shù)被移除

MySQL 8.0移除了PASSWORD()函數(shù),不能用于設(shè)置密碼:

-- MySQL 8.0中會(huì)報(bào)錯(cuò)
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('123') ...;
ERROR 1305 (42000): FUNCTION PASSWORD does not exist

必須使用ALTER USERmysqladmin命令

4. 安全建議

# 1. 定期更換密碼(建議每90天)
mysqladmin -uroot -p password

# 2. 使用復(fù)雜密碼
# 好密碼: MyNewP@ssw0rd2025!
# 壞密碼: 123456、password、root

# 3. 不同環(huán)境使用不同密碼
# 開(kāi)發(fā)、測(cè)試、生產(chǎn)密碼分開(kāi)

# 4. 密碼不要明文寫(xiě)在腳本中
# 使用mysql_config_editor創(chuàng)建登錄路徑
mysql_config_editor set --login-path=local --host=localhost --user=root --password

總結(jié)

MySQL root密碼管理可以概括為三個(gè)場(chǎng)景、三種方法:

場(chǎng)景核心命令關(guān)鍵點(diǎn)
首次部署mysqld --initialize記下臨時(shí)密碼
已知密碼修改ALTER USER / mysqladmin8.0用ALTER,5.7用UPDATE
忘記密碼重置mysqld_safe --skip-grant-tables先刷FLUSH,再改密碼

最佳實(shí)踐

  • 生產(chǎn)環(huán)境使用--initialize初始化,生成復(fù)雜密碼
  • 定期更換密碼,使用密碼管理工具保存
  • 不同環(huán)境使用不同密碼,避免密碼泄露擴(kuò)散
  • 遇到忘記密碼不要慌,安全模式是救命稻草

記?。?strong>密碼管理是數(shù)據(jù)庫(kù)安全的第一道防線,也是最后一道防線。

以上就是MySQL中root用戶密碼管理的三種場(chǎng)景完全指南的詳細(xì)內(nèi)容,更多關(guān)于MySQL root用戶密碼管理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL索引失效的問(wèn)題解決

    MySQL索引失效的問(wèn)題解決

    索引可以大大提高查詢速度和效率,但如果索引失效了,查詢的效率會(huì)變得非常低,本文主要介紹了MySQL索引失效的問(wèn)題解決,感興趣的可以了解一下
    2024-05-05
  • MySQL查詢本周數(shù)據(jù)實(shí)現(xiàn)方式

    MySQL查詢本周數(shù)據(jù)實(shí)現(xiàn)方式

    這篇文章主要介紹了MySQL查詢本周數(shù)據(jù)實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2026-06-06
  • Mysql刪除幾億條數(shù)據(jù)表中的部分?jǐn)?shù)據(jù)的方法實(shí)現(xiàn)

    Mysql刪除幾億條數(shù)據(jù)表中的部分?jǐn)?shù)據(jù)的方法實(shí)現(xiàn)

    在MySQL中刪除一個(gè)大表中的數(shù)據(jù)時(shí),需要特別注意操作的性能和對(duì)系統(tǒng)的影響,本文主要介紹了Mysql刪除幾億條數(shù)據(jù)表中的部分?jǐn)?shù)據(jù)的方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • MySQL中關(guān)于datetime、date、time、str之間的轉(zhuǎn)化與比較

    MySQL中關(guān)于datetime、date、time、str之間的轉(zhuǎn)化與比較

    這篇文章主要介紹了MySQL中關(guān)于datetime、date、time、str之間的轉(zhuǎn)化與比較,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • MySQL內(nèi)置函數(shù)全解析

    MySQL內(nèi)置函數(shù)全解析

    MySQL內(nèi)置函數(shù)包括日期、字符串、數(shù)學(xué)、進(jìn)制轉(zhuǎn)換及其他實(shí)用函數(shù),用于簡(jiǎn)化數(shù)據(jù)庫(kù)操作和數(shù)據(jù)處理,本文給大家介紹MySQL內(nèi)置函數(shù)全解析,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • Druid數(shù)據(jù)庫(kù)連接池的jar包的使用方式

    Druid數(shù)據(jù)庫(kù)連接池的jar包的使用方式

    這篇文章主要介紹了Druid數(shù)據(jù)庫(kù)連接池的jar包的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • mysql中inner join和left join使用詳解

    mysql中inner join和left join使用詳解

    本文主要介紹了mysql中inner join和left join使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • explain分析sql效率的方法

    explain分析sql效率的方法

    下面小編就為大家?guī)?lái)一篇explain分析sql效率的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • MySQL數(shù)據(jù)庫(kù)如何導(dǎo)入導(dǎo)出(備份還原)

    MySQL數(shù)據(jù)庫(kù)如何導(dǎo)入導(dǎo)出(備份還原)

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)如何導(dǎo)入導(dǎo)出(備份還原),需要的朋友可以參考下
    2015-10-10
  • MySQL 查詢重復(fù)數(shù)據(jù)的具體示例

    MySQL 查詢重復(fù)數(shù)據(jù)的具體示例

    本文介紹MySQL查詢重復(fù)數(shù)據(jù)的三種方法分別是通過(guò)GROUP BY和HAVING查找重復(fù)記錄,使用子查詢或JOIN列出所有重復(fù)行,添加計(jì)數(shù)顯示重復(fù)次數(shù),同時(shí)提醒注意性能優(yōu)化與數(shù)據(jù)備份,對(duì)mysql查詢重復(fù)數(shù)據(jù)相關(guān)知識(shí)感興趣的朋友一起看看吧
    2025-07-07

最新評(píng)論

东兴市| 霸州市| 灵丘县| 确山县| 竹山县| 柘荣县| 福鼎市| 大宁县| 合阳县| 郓城县| 红原县| 邹城市| 卫辉市| 元氏县| 罗田县| 苍梧县| 河津市| 尖扎县| 阳信县| 阜康市| 正镶白旗| 措勤县| 北京市| 蓝山县| 治多县| 承德县| 衡南县| 新化县| 安化县| 临沧市| 健康| 嘉义县| 岗巴县| 金川县| 贡觉县| 高邑县| 乌鲁木齐市| 观塘区| 谢通门县| 荥经县| 利辛县|