windows 下重置 mysql 的 root 密碼

今天發現 WordPress 鏈接不上數據庫,登陸 window server 服務器查看,全部服務均運行正常。mysql

使用 root 帳號登陸 mysql 數據庫,結果提示密碼不匹配。我忽然意識到,服務器可能遭受到 SQL注入 攻擊了……sql

至於事故發生的緣由和以後所作的補救措施,之後有機會我會聊一聊的。這裏我主要講一下 mysql 用戶密碼的重置步驟。數據庫

 

重置 root 密碼

在忘記 root 密碼的狀況下,能夠進入 mysql 的安全模式,重置 root 密碼。安全

1. 中止 MySQL 服務

打開命令提示符窗口,輸入   net stop mysql   關閉 MySQL 服務。服務器

C:\Users\Administrator>net stop mysql57
MySQL57 服務正在中止..
MySQL57 服務已成功中止。

↑ 服務名稱不必定都是 mysql,好比個人就是 mysql57,57表明版本號爲5.7函數

固然你也能夠經過計算機管理面板關閉 MySQL 服務。ui

2. 切換到 bin 目錄

在命令提示符窗口中,經過 cd 命令切換到 mysql 安裝目錄下的 bin 目錄。加密

C:\Users\Administrator>

cd C:\Program Files\MySQL\MySQL Server 5.7\bin C:\Program Files\MySQL\MySQL Server 5.7\bin>

↑ 默認安裝目錄爲 C:\Program Files\MySQL\MySQL Server spa

3. 進入安全模式

在 bin 目錄下輸入   mysqld --skip-grant-tables   ,跳過權限檢查啓動 mysql。code

若是你配置了 my.ini 文件,則須要將其引入:   mysqld --defaults-file="../my.ini" --skip-grant-tables 

[mysqld]

basedir = "C:\ProgramData\MySQL\MySQL Server 5.7"
datadir = "C:\ProgramData\MySQL\MySQL Server 5.7\Data"

↑ 我在 my.ini 文件中指定了數據的存放路徑,若是不引入配置文件,則會提示 No such file or directory 錯誤。

4. 重置帳戶密碼

打開另外一個命令提示符窗口(別關閉安全模式窗口),一樣切換到 mysql \ bin 目錄,輸入   mysql   跳過權限驗證鏈接數據庫。

C:\Program Files\MySQL\MySQL Server 5.7\bin>mysql
Server version: 5.7.16 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

↑ 也能夠指定鏈接參數 mysql -u <用戶名> -p <密碼> -h <鏈接地址> -P <端口號> -D <數據庫>

執行   update mysql.user set authentication_string="" where user="root";   重置 root 用戶的密碼(5.7 以前爲 password 字段)。

mysql> update mysql.user set authentication_string="" where user="root";
Query OK, 1 row affected (0.00 sec)

mysql> select user,authentication_string from mysql.user\G
*************************** 1. row ***************************
                 user: root
authentication_string:
*************************** 2. row ***************************
                 user: mysql.sys
authentication_string: *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE

2 rows in set (0.00 sec)

↑ root 用戶的 authentication_string 字段已經被清空了

5. 刷新權限表

執行   flush privileges;   命令刷新權限表,密碼已經重置完成,輸入   quit   退出。

mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)

mysql> quit
Bye

關閉全部命令提示符窗口,經過任務管理器結束 mysqld.exe 進程。重啓 MySQL 服務,以後就能夠直接登陸 root 帳號了。

 

修改 root 密碼

出於安全考慮,root 密碼不宜爲空,因此須要在密碼重置以後,再從新設置一個密碼。

方法一:SET PASSWORD

  • SET PASSWORD FOR "username"=PASSWORD("new password");

以 root 身份登陸 mysql,再使用 set password 命令修改密碼:

mysql> set password for root@localhost = password("pswd");
Query OK, 0 rows affected, 1 warning (0.00 sec)

方法二:mysqladmin

  • mysqladmin -u "username" -p password "new password"

執行該命名以後會提示輸入原密碼,輸入正確後便可修改。

C:\Program Files\MySQL\MySQL Server 5.7\bin> mysqladmin -u root -p password pswd
Enter password: ****

mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

方法三:UPDATE TABLE

  • UPDATE mysql.user SET authentication_string=PASSWORD("new password") WHERE user="username";

在重置 root 密碼的同時,也能夠設置默認密碼。不過密碼不能爲明文,必須使用 password() 函數加密。

mysql> update mysql.user set authentication_string=password("pswd") where user="root";
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
相關文章
相關標籤/搜索