天天看點

MysqL資料庫密碼的管理

                 恢複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,如需轉載請自行聯系原作者