![952230e8f544805419686914b26b3a03.png](https://img-blog.csdnimg.cn/img_convert/952230e8f544805419686914b26b3a03.png)
1 概述
相信大多数个人和企业都会用到Mysql数据库,而Mysql数据库作为目前流行的数据库管理系统之一,以其体积小、速度快、开源特性,受到大家追捧。
Mysql版本也在不断更新迭代,而在生产环境中用的最多的还是Mysql5.5和Mysql5.7。那同时接触到两种版本的小伙伴,肯定心中也会有以下疑问吧?
- Mysql5.7 的新特性带来的冲击能否取代Mysql5.5?
- Mysql5.7 在性能方面是否优于Mysql5.5?
人们对于新事物总是抱有好奇和探索的心,那么接下来我们带着疑问去挖掘 Mysql5.7在新特性和性能方面的变化。
2 Mysql5.7 新特性
2.1 安全方面
2.1.1 user表字段变更
mysql.user表 字段authentication_string替代password字段
案例:
Mysql5.5
2.1.2 用户名最大长度增加
用户长度最大为32字节,之前最大长度为16字节,并且CREATE USER 和 DROP USER 命令里实现了 IF [NOT] EXISTS 条件判断。
案例:
M ysql5.7用户名支持16位以上(上-Mysql5.5,下-Mysql5.7)![10b4cc6feb6843cccb9c6aacb23ac047.png](https://img-blog.csdnimg.cn/img_convert/10b4cc6feb6843cccb9c6aacb23ac047.png)
2.1.3 密码过期策略
增加密码过期机制,过期后需要修改密码,否则可能会被禁用,或者进入沙箱模式。
为用户设置密码过期时间,一定时间以后,强制用户修改密码。可以直接在create user的时候设置,也可以alter user设置:
- PASSWORD EXPIRE NEVER # 默认,过期时间受全局变量 default_password_lifetime 控制
- PASSWORD EXPIRE INTERVAL N DAY #N天后过期
案例:
当密码过期策略是默认时,由 default_password_lifetime 的参数决定过期间, 0 表示永不过期![ad536d6d0c01579568f384ccfeb7939d.png](https://img-blog.csdnimg.cn/img_convert/ad536d6d0c01579568f384ccfeb7939d.png)
2.1.4 密码安全策略
密码要求的强度受参数:validate_password_policy 的影响。validate_password_policy的值有:
- 0 or LOW:仅需需符合密码长度(由参数validate_password_length指定,默认为8)
- 1 or MEDIUM:满足LOW策略,同时还需满足至少有1个数字,小写字母,大写字母和特殊字符,默认。
- 2 or STRONG:满足MEDIUM策略,同时密码不能存在字典文件(dictionary file)中相关参数:
validate_password_dictionary_file:在STRONG模式下还能设置字典文件,字典中存在的密码不得使用。可以通过该参数来设置字典文件。
validate_password_length:设置密码的最小长度,默认值为8。
validate_password_mixed_case_count:小写和大写字符的最小数目,如果密码策略是MEDIUM或STRONG的,有validate_password插件检查,默认1。
validate_password_number_count:数字字符的最小数目,如果密码策略是MEDIUM或STRONG的,有validate_password插件检查,默认1。
validate_password_special_char_count:非字母字符(特殊字符)的最小数目,如果密码策略是MEDIUM或STRONG的,有validate_password插件检查,默认1。
案例:
开启密码策略的两种方式
A、 修改配置文件并重启
[mysqld]
plugin-load=validate_password.so
validate-password=FORCE_PLUS_PERMANENT
B、 在线修改,临时生效
设置了密码策略,简单密码会报ERROR2.1.5 用户可以锁定
可以对建立用户进行锁定和解锁
案例:
对用户user进行锁定和解锁2.1.6 初始化方式改变
高版本的MySQL,逐步废弃mysql_install_db的初始化方式
在5.7中,推荐使用bin/mysqld –-initialize对数据库进行初始化,初始化过程会创建带随机密码的 root@localhost 账号并不再创建test 库,初始化输出如下:
[Note] A temporary password is generated for root@localhost: KJ1foE6BFX;3
在初始化时如果使用–initial-insecure,则会创建空密码的 root@localhost 账号,新初始化的 root@localhost 账号,第一次登录时,需要修改新的密码才能正常使用。
2.2 新支持
2.2.1 原生支持JSON
5.7版本之前,只能在varchar或是text等字符类型的列中存储json类型的字符串,并通过程序解析使用json字符串。这种做法当然有其缺陷:必须自行确认/解析数据、解决更新中的困难、或在执行插入操作时忍