恢複MySQL管理密碼
實驗内容:
一、在忘記密碼的情況下,修改密碼
二、在原有密碼的基礎上修改密碼
1.恢複MySQL管理密碼
1)首先停止已運作的MySQL服務程式
# service mysql stop //先停止服務
Shutting down MySQL... [确定]
# service mysql status //确認狀态
MySQL is not running
[失敗]
2)然後跳過授權表啟動MySQL服務程式
這一步主要利用mysqld的 --skip-grant-tables選項,具體操作時可選擇不同方式,但本質上是一樣的。以下提供三種方式,任選其中一種都可以。
方式1(推薦):
執行mysql腳本起服務,末尾加 --skip-grant-tables 參數:
# service mysql start --skip-grant-tables
Starting MySQL............ [确定]
[root@dbsvr1 ~]# service mysql status
MySQL running (45640) [确定]
方式2:
執行mysqld_safe程序,添加 --skip-grant-tables 參數:
[root@dbsvr1 ~]# mysqld_safe --user=mysql --skip-grant-tables &
[1] 46076
140110 09:58:39 mysqld_safe Logging to '/var/lib/mysql/dbsvr1.tarena.com.err'.
140110 09:58:39 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
方式3:
修改my.cnf配置,添加 skip_grant_tables=1啟動設定:
[root@dbsvr1 ~]# vim /etc/my.cnf
[mysqld]
skip_grant_tables=1
.. ..
[root@dbsvr1 ~]# service mysql start
Starting MySQL [确定]
MySQL running (46580) [确定]
3)使用mysql指令連接配接到MySQL服務,重設root的密碼
由于前一步啟動的MySQL服務跳過了授權表,是以可以root從本機直接登入,不需要驗證密碼:
# mysql -u root //直接登入即可
Welcome to the MySQL monitor. Commands end with ; or \g.
mysql>
4)進入 mysql> 環境後,通過修改mysql庫中user表的相關記錄,重設root使用者從本機登入的密碼:
mysql> UPDATE mysql.user SET password=PASSWORD('1234567')
-> WHERE user='root' AND host='localhost'; //重設root的密碼
Query OK, 0 rows affected (0.17 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> FLUSH PRIVILEGES;
//flush privileges 重新整理授權表
Query OK, 0 rows affected (0.00 sec)
mysql> exit //退出mysql> 環境
Bye
5)重新以正常方式啟動MySQL服務程式,驗證新密碼
如果前面是修改/etc/my.cnf配置的方法來跳過授權表,則重置root密碼後,應去除相應的設定以恢複正常:
#skip_grant_tables=1 //注釋掉或删除此行,如果沒用方式三不用修改
... ..
按正常方式,通過mysql腳本重新開機服務即可:
[root@dbsvr1 ~]# service mysql restart
Shutting down MySQL.. [确定]
Starting MySQL. [确定]
驗證無密碼登入時,将會被拒絕:
.[root@dbsvr1 ~]# mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
隻有提供重置後的新密碼,才能成功登入:
[root@dbsvr1 ~]# mysql -u root -p
Enter password:
2.正常設定MySQL管理密碼(在原密碼的基礎上修改)
正常的前提是:已知目前MySQL管理使用者(root)的密碼。
1)方法1:
在Shell指令行下設定
#mysqladmin –uroot –p password “123”; //新密碼
Enter password://輸入舊的密碼
2)方法2,以root登入mysql> 後,使用SET PASSWORD指令設定
這個與新安裝MySQL-server後首次修改密碼時要求的方式相同,平時也可以用
mysql> SET PASSWORD FOR root@localhost=PASSWORD('1234567')
Query OK, 0 rows affected (0.16 sec)
3)方法3,以root登入mysql> 後,使用GRANT授權工具設定
mysql> GRANT all ON *.* TO root@localhost IDENTIFIED BY '1234567';
4)方法4,以root登入mysql> 後,使用UPDATE更新相應的表記錄
這種方法與恢複密碼時的操作相同:
mysql> UPDATE mysql.user SET password=PASSWORD('1234567') //用密碼函數生成密碼
實驗總結:
1、為了避免沖突,跳過授權表修改mysql密碼的三種方式不要同時使用。若要分别測試不同方式,同樣要先停用其他方式啟動的MySQL服務程式(直接service mysql stop即可)。
2、通過執行“FLUSH PRIVILEGES;”可使授權表立即生效,對于正常運作的MySQL服務,也可以用上述方法來修改密碼,不用重新開機服務。本例中因為是恢複密碼,最好重新開機MySQL服務程式,是以上述“FLUSH PRIVILEGES;”操作可跳過。
3在正常設定密碼方法中,需要特别注意:當MySQL服務程式以 --skip-grant-tables 選項啟動時,如果未
執行“FLUSH PRIVILEGES;”操作,是無法通過SET PASSWORD或者GRANT方式來設定密碼的。
比如,驗證這兩種方式時,都會看到ERROR 1290的出錯提示:
mysql> SET PASSWORD FOR root@localhost=PASSWORD('1234567');
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
本文轉自Jx戰壕 51CTO部落格,原文連結:http://blog.51cto.com/xujpxm/1386294,如需轉載請自行聯系原作者