首页 » MySQL » mysql5.7的一些新特性

mysql5.7的一些新特性

 

一、初始化

1、5.7.6之前的版本初始化,一般用:mysql_install_db –basedir=/*  –datadir=/var/lib/mysql  –user=mysql

2、5.7.6之后的版本:不用mysql_install_db,而是用mysqld –initialize来初始化。

mysqld --user=mysql --basedir=/opt/17173_install/mysql-5.7.7-rc-linux-glibc2.5-x86_64/ --datadir=/data/mysql --initial 
在初始化时如果加上 –initialize-insecure,则会创建空密码的 root@localhost 账号,否则会创建带密码的 root@localhost 账号,密码直接写在 log-error 日志文件中(在5.6版本中是放在 ~/.mysql_secret 文件里,更加隐
如果指定了 --initialize-insecure,那么也不会安装validate_password插件,也就是
show variables like 'vali%';会是空的。
二、密码更改及产生的密码位置
1、root密码可能会在~/.mysql_secret里面,像我现在yum 安装的5.7.16,启动的时候会初始化数据库,密码是产生在日志里
可以用grep "password" /var/log/mysqld.log进行查看到。
而且登录之后,必须更改密码,密码长度至少8位,如果要设置成简单密码,可以这样设置:

set global validate_password_policy = 0;

2、更改密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

3、5.7.6之后,mysql.user表中没有password字段了,是authenticatio_string代替了,所以修改密码可以这样:

 update mysql.user set authentication_string=password('new_password') where user='root' and Host ='localhost';

当做也可以alter user ‘root’@’localhost’ identified by ‘new secret’;这样来改。

4、5.7.6以后,对密码设置要求增加了,至少8位,如果没有符合要求去更改密码,会报以下错误:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

当然也可以设置成不按它的要求:

set global validate_password_policy = 0;这样设置之后,但密码长度必须是8位,
如果想设置少于8位,需要修改长度:set global validate_password_length=4;

5、忘记密码,重置密码
1、5.7.6以后没有mysqld_safe命令了,所以之前是这样启动:

mysqld_safe –defaults-file=/data/3306/my.cnf –skip-grant-table  –user=mysql  &(单实例配置文件可以忽略,table可以加s ,也可以不加,5.7.16是需要加s的,如果不加会退出来。)

2、5.7.6之后没有mysqld_safe命令,可以使用:mysqld –skip-grant-tables –user=mysql &就可以了。

重置密码不能使用alter user,需要使用这个update,

update mysql.user set authentication_string=password(‘new secret’) where user=’root’ and host=’localhost’;(5.7.6以后是这样,之前把authentication_string改成password就可以了,只是字段名字更改了而已。)

 

三、密码安全等级说明

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+

通过  SET GLOBAL  validate_password_policy=’LOW’;  命令,降低安全等级后,就可以直接使用,限制是必须8个字符以上;

关于安全等级更详细的介绍如下

  • LOW 政策只测试密码长度。 密码必须至少有8个字符长。
  • MEDIUM 政策的条件 密码必须包含至少1数字字符,1 大写和小写字符,和1特别 (nonalphanumeric)字符。
  • STRONG 政策的情况 密码子字符串长度为4的或更长时间不能匹配 单词在字典文件中,如果一个人被指定。

其中可以看到validate有很多参数:

  • validate_password_dictionary_file:插件用于验证密码强度的字典文件路径。
  • validate_password_length:密码最小长度。
  • validate_password_mixed_case_count:密码至少要包含的小写字母个数和大写字母个数。
  • validate_password_number_count:密码至少要包含的数字个数。
  • validate_password_policy:密码强度检查等级,0/LOW、1/MEDIUM、2/STRONG。
  • validate_password_special_char_count:密码至少要包含的特殊字符数。

其中,关于validate_password_policy-密码强度检查等级:

  • 0/LOW:只检查长度。
  • 1/MEDIUM:检查长度、数字、大小写、特殊字符。
  • 2/STRONG:检查长度、数字、大小写、特殊字符字典文件。

可以直接在mysql中进行参数的修改

mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_special_char_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_number_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=0;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%password%';
+---------------------------------------+-------+
| Variable_name                         | Value |
+---------------------------------------+-------+
| default_password_lifetime             | 0     |
| disconnect_on_expired_password        | ON    |
| log_builtin_as_identified_by_password | OFF   |
| mysql_native_password_proxy_users     | OFF   |
| old_passwords                         | 0     |
| report_password                       |       |
| sha256_password_proxy_users           | OFF   |
| validate_password_check_user_name     | OFF   |
| validate_password_dictionary_file     |       |
| validate_password_length              | 0     |
| validate_password_mixed_case_count    | 0     |
| validate_password_number_count        | 0     |
| validate_password_policy              | LOW   |
| validate_password_special_char_count  | 0     |
+---------------------------------------+-------+
14 rows in set (0.00 sec)

当然,此种变更,只能在当前环境下生效,重启mysql后会失效

想要长期生效,需要将更改写入配置文件中才可永久生效

也可以直接在配置文件中进行修改禁用validate-password功能

编辑my.cnf配置文件,在mysqld下面加入“validate-password=0”,然后重启mysql即可。

[root@bogon ~]# grep -v ^# /etc/my.cnf  | grep -v ^$
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
validate-password=0
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

将mysql的密码安全等级降低之后,可以将root密码修改回来

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> update user set authentication_string = password("") where user="root";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> exit

以上密码root即清除为空了。使用mysql即可直接进入mysql。当然生产环境中不推荐此种做法。

 

原文链接:mysql5.7的一些新特性,转载请注明来源!

3