1. 程式人生 > >忘記MySQL密碼的解決方案

忘記MySQL密碼的解決方案

  在開發或者運維等場景中,或者伺服器安裝好了很久未使用,總之種種原因MySQL密碼忘記了。這個時候需要重置MySQL的密碼,其實這個並不難,下面說一下實現思路和方案。

    這裡以Linux為例進行說明重置密碼要分兩個步驟:

1、登陸到MySQL命令列介面

2、使用SQL指令修改密碼

按照這兩部操作就好了,可能我們有疑惑:密碼都忘記了怎麼登陸到命令列介面呢?其實這個在啟動MySQL的時候跳過密碼認證就可以了。首先要停止MySQL服務,這個和安裝MySQL的方式有關,大致三種方式可以停止:

1、使用 service 停止:service mysqld stop
2、使用 mysqld 停止:/etc/inint.d/mysqld stop (注意mysqld的路徑需要和安裝時的一致,根據實際情況執行對應命令)
3、使用mysqladmin停止:mysqladmin shutdown

如果無法停止可以使用kill命令殺掉mysql程序

然後啟動,這個很關鍵了雖然MySQL可能可以通過service mysqld start或者/etc/init.d/mysql start啟動但是不能這樣做,應該在MySQL的安裝目錄下找到safe_mysqld然後使用

mysqld_safe --skip-grant-tables &

注意可能需要mysqld_safe的全路徑,這樣啟動後就可以使用空密碼登陸MySQL了。

第二步就是修改密碼了,其實就是修改資料表,因為MySQL的使用者和密碼儲存在資料表中。儲存在資料庫名為mysql的資料庫中的user表中,至於密碼欄位這個和MySQL版本有關了如果是MySQL5.7之前的版本,密碼儲存在Password欄位如果是MySQL5.7及之後的版本密碼儲存在authentication_string欄位中,另外幾個相關欄位為:Host(主機)、User(使用者名稱)兩個欄位,下面給出MySQL5.6及以前版本和MySQL5.7及之後的版本的更新密碼SQL,使用root和空密碼登入MySQL命令列介面後使用

use mysql;
#MySQL5.6及之前版本修改密碼
update set Password=password('新密碼') where User='root';
#MySQL5.7之後及8.0之前版本修改密碼
update user set authentication_string=password('新密碼') where User='root';   
flush privileges;
#MySQL8.0及之後版本修改密碼
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密碼';

重啟MySQL即可生效!

另外補充一點mysql初始化的命令,如果因為某些原因表損壞等需要初始化mysql資料庫可以使用

/usr/local/mysql/scripts/mysql_install_db \
--defaults-file=/etc/my.cnf --datadir=/usr/local/mysql/data \
--basedir=/user/local/mysql --user=mysql

以上命令假設mysql安裝在/usr/local/mysql目錄下以mysql使用者身份啟動,請對號入座。