MySQL 5.7版本开始,增强密码验证机制,网上说安装的时候会在/root/.mysql_secret 文件中生成默认密码,这一点自 5.7.6版本以后也去掉了。
针对如果生成默认密码,网上有一个版本,内容如下:
1、修改配置文件,一般在 /etc/my.cnf, 在[mysqld]字段下增加skip-grant-tables 字段,用以忽略权限验证;
2、重启MySQL服务器,CentOS 7.0操作命令是:
1 |
|
3、使用mysql -u root -p 登录数据, 密码直接回车;
4、修改mysql数据库(名称),user表的authentication_string字段,修改命令如下:
1 2 3 |
|
5、修改配置文件,去掉skip-grant-tables,恢复成原来的样子, 然后重新MySQL服务器。
6、使用第4步设置的密码,登录mysql服务器。
7、通过 set password=password(‘new_password‘); 命令重新设置密码;
以上的方法,在MySQL 5.7早期版本时,还是很好用的,但在MySQL 5.7.6以后的版本,最后一点重置密码总是无法生效,会出来下面的错误。
1 |
|
同时,无法进行其它的操作。
这是因为,自MySQL 5.7开始,密码存在有效期的概念, 同时因为安全等级的问题,需要使用使用其它的方式进行设置。另一个需要注意的点是, 自5.7.6开始废弃了password()函数,同时无法设置old_password=1, 这真的是一件比较曲折的探索过程。
那么,先把MySQL 5.7.9版本以上的密码设置方法整理一下。
大部分和上面整理的内容相同,关键在第4步后,把authentication_string 里写入的值记一下(这是因为password()函数已废弃)
通过使用以下命令,代替第7步的, set password=password(‘new_password‘) 方法。
1 2 3 4 |
|
其实上面的命令有一个简化版本,命令如下
1 2 3 |
|
之所以会出现上面的错误信息,这和密码的安全等级相关,查看安全等级命令如下
1 2 3 4 5 6 7 8 9 10 11 |
|
通过 SET GLOBAL validate_password_policy=‘LOW‘; 命令,降低安全等级后,就可以直接使用,限制是必须8个字符以上;
关于安全等级更详细的介绍如下
LOW
政策只测试密码长度。 密码必须至少有8个字符长。MEDIUM
政策的条件 密码必须包含至少1数字字符,1 大写和小写字符,和1特别 (nonalphanumeric)字符。STRONG
政策的情况 密码子字符串长度为4的或更长时间不能匹配 单词在字典文件中,如果一个人被指定。
最后,为了解决密码失效的问题, 最后在配置文件的[mysqld]字段下,增加以下字段
1 2 |
|
也可以通过命令行进行设置
1 |
|
关于密码有效期相关的更多信息,可以参考 http://dev.mysql.com/doc/refman/5.7/en/password-expiration-policy.html
好了,希望上面的信息能够对大家所有帮助。