1.忘记 root 密码

忘记 root 密码的场景还是比较常见的,特别是自己搭的测试环境经过好久没用过时,很容易记不得当时设置的密码。这个时候一般常用的方法是跳过权限验证,然后更改 root 密码,之后再启用权限验证。以MySQL 5.7 版本为例简单讲下主要过程:
首先修改配置文件,在[mysqld]部分加上一句:skip-grant-tables ,加上此参数的目的是跳过权限验证。然后重启数据库,数据库再次启动后,我们就可以不用密码直接登录数据库修改密码了。
# skip-grant-tables 模式下修改root密码[root@host ~]# mysqlWelcometo the MySQL monitor. Commandsendwith ;or \g.Your MySQLconnection idis 16Server version: 5.7.23-log MySQL Community Server (GPL)Copyright (c) 2000, 2018, Oracleand/or its affiliates.All rights reserved.Oracleis a registered trademarkof Oracle Corporationand/or itsaffiliates. Other names may be trademarksof their respectiveowners.Type'help;'or'\h'for help. Type'\c'to clear thecurrent input statement.mysql>update mysql.userset authentication_string =password ('xxxxxx')whereuser ='root'and host ='localhost';Query OK, 0rows affected, 1 warning (0.00 sec)Rows matched: 1 Changed: 0 Warnings: 1mysql> flushprivileges;Query OK, 0rows affected (0.01 sec)
修改完 root 密码后,再次去除 skip-grant-tables 参数,然后重启下数据库即可。

2.几种修改密码的方法

除去忘记密码,可能还有其他情景需要修改密码,这时候就可以采取普通方式修改密码了。还是以 MySQL 5.7 版本为例,介绍几种常用的修改密码的方法。
使用 alter user 修改
比如如果想更改 testuser 账号的密码,我们可以使用 root 账号登录,然后执行 alter user 命令更改 testuser 账号的密码。
mysql>alteruser'testuser'@'%' identifiedby'Password1';Query OK, 0rows affected (0.01 sec)mysql> flushprivileges;Query OK, 0rows affected (0.00 sec)
使用 SET PASSWORD 命令
使用 SET PASSWORD 修改密码命令格式为 SET PASSWORD FOR 'username'@'host' = PASSWORD('newpass'); 同样是使用 root 账号可修改其他账号的密码。
mysql>SETPASSWORDFOR'testuser'@'%' =PASSWORD('Password2');Query OK, 0rows affected, 1 warning (0.00 sec)mysql> flushprivileges;Query OK, 0rows affected (0.00 sec)
使用 mysqladmin 修改密码
使用 mysqladmin 命令修改账号密码格式为 mysqladmin -u用户名 -p旧密码 password 新密码
[root@host ~]# mysqladmin -utestuser -pPassword2password Password3mysqladmin: [Warning] Using apasswordon the command line interface can be insecure.Warning: Sincepassword will be sentto serverin plain text, use sslconnectionto ensurepassword safety.[root@host ~]# mysql -utestuser -pPassword3mysql: [Warning] Using apasswordon the command line interface can be insecure.Welcometo the MySQL monitor. Commandsendwith ;or \g.Your MySQLconnection idis 2388Server version: 5.7.23-log MySQL Community Server (GPL)Copyright (c) 2000, 2018, Oracleand/or its affiliates.All rights reserved.Oracleis a registered trademarkof Oracle Corporationand/or itsaffiliates. Other names may be trademarksof their respectiveowners.Type'help;'or'\h'for help. Type'\c'to clear thecurrent input statement.mysql>
直接 update user 表
其实 MySQL 所以的账号信息都存储在 mysql.user 表里面,我们也可以直接通过 update user 表来修改密码。
# 5.7及之后版本mysql>update mysql.userset authentication_string =password ('Password4')whereuser ='testuser'and host ='%';Query OK, 1 row affected, 1 warning (0.06 sec)Rows matched: 1 Changed: 1 Warnings: 1mysql> flushprivileges;Query OK, 0rows affected (0.01 sec)# 5.6及之前版本update mysql.usersetpassword=password('新密码')whereuser='用户名'and host='host';

3.设置 login-path 本地快捷登陆

为了防止密码暴露及忘记密码,我们还可以设置 login-path 来实现在本地不输密码快捷登录。
login-path 是MySQL 5.6 开始支持的新特性。通过借助 mysql_config_editor 工具将登陆 MySQL 服务的认证信息加密保存在 .mylogin.cnf 文件(默认位于用户主目录)。MySQL 客户端工具可通过读取该加密文件连接 MySQL ,实现快捷登录。
假设我们想配置 root 账号在本地快捷登录,可以这么做:
# 执行回车后需要输入一次root密码[root@host ~]# mysql_config_editorset--login-path=root -uroot -hlocalhost -p -P3306Enterpassword:# 配置完成后可以使用login-path登录[root@host ~]# mysql--login-path=rootWelcometo the MySQL monitor. Commandsendwith ;or \g.Your MySQLconnection idis 2919Server version: 5.7.23-log MySQL Community Server (GPL)