當使用update user set passsword=password("123456") where user="root";修改root密碼時會提示如下錯誤:
ERROR 1054 (42S22): Unknown column 'passsword' in 'field list'
這是因爲在MySQL 5.7 password字段已從mysql.user表中刪除,新的字段名是“authenticalion_string”.
可使用use mysql; desc user;查看如下:
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Repl_slave_priv | enum('N','Y') | NO | | N | |
| Repl_client_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Create_user_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
| Create_tablespace_priv | enum('N','Y') | NO | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher | blob | NO | | NULL | |
| x509_issuer | blob | NO | | NULL | |
| x509_subject | blob | NO | | NULL | |
| max_questions | int(11) unsigned | NO | | 0 | |
| max_updates | int(11) unsigned | NO | | 0 | |
| max_connections | int(11) unsigned | NO | | 0 | |
| max_user_connections | int(11) unsigned | NO | | 0 | |
| plugin | char(64) | NO | | mysql_native_password | |
| authentication_string | text | YES | | NULL | |
| password_expired | enum('N','Y') | NO | | N | |
| password_last_changed | timestamp | YES | | NULL | |
| password_lifetime | smallint(5) unsigned | YES | | NULL | |
| account_locked | enum('N','Y') | NO | | N | |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
45 rows in set (0.00 sec)
方法1: 用SET PASSWORD命令
首先登錄MySQL。
格式:mysql> set authentication_stringfor 用戶名@localhost = password('新密碼');
例子:mysql> set authentication_stringfor root@localhost = password('123');
方法2:用mysqladmin
格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼
例子:mysqladmin -uroot -p123456 password 123
方法3:用UPDATE直接編輯user表
首先登錄MySQL。
mysql> use mysql;
mysql> update user set authentication_string=password('123') where user='root' and host='localhost';
mysql> flush privileges;
方法4:在忘記root密碼的時候,可以這樣
以windows爲例:
1. 關閉正在運行的MySQL服務。
2. 打開DOS窗口,轉到mysql\bin目錄。
3. 輸入mysqld --skip-grant-tables 回車。--skip-grant-tables 的意思是啓動MySQL服務的時候跳過權限表認證。
4. 再開一個DOS窗口(因爲剛纔那個DOS窗口已經不能動了),轉到mysql\bin目錄。
5. 輸入mysql回車,如果成功,將出現MySQL提示符 >。
6. 連接權限數據庫: use mysql; 。
6. 改密碼:update user set authentication_string=password("123") where user="root";(別忘了最後加分號) 。
7. 刷新權限(必須步驟):flush privileges; 。
8. 退出 quit。
9. 註銷系統,再進入,使用用戶名root和剛纔設置的新密碼123登錄。
我用的是方法3,有問題請見原文:
mysql如何修改root用戶的密碼 - 鋒齊葉落 - 博客園 https://www.cnblogs.com/qianzf/p/7089197.html
作者:hs_2017
來源:CSDN
原文:https://blog.csdn.net/hs_2017/article/details/79165762