MySQL8.0新特性

官方文档:https://blogs.oracle.com/mysql/post/announcing-general-availability-of-mysql-80

https://www.cnblogs.com/xyabk/p/10882913.html

https://www.imooc.com/video/18904

 

一、用户与安全策略

1.1认证加密插件

show variables like 'default_authentication_plugin%';

 在老版本的基础上,新增caching_sha2_password插件,可以使用缓存解决连接时的延时问题。

注意问题:客户端和服务端使用的加密插件必须要统一。

在MySQL8.0中,同时支持新老插件,如果C/S两端使用的插件不一致,则无法登录。

https://www.cnblogs.com/yinzhengjie/p/10301516.html

 

1.2密码管理策略

 

password_history 不允许与最近几次使用过的密码重复,默认是0,即不限制;<br>若为5,则不能与近5次的密码相同。【基于次数限制】
password_require_current 修改密码是否需要提供当前的登录密码,[OFF/ON]
password_reuse_interval 修改密码不允许与最近多少天的使用过的密码重复。<br>默认是0,即不限制。【基于天数限制】

 

 

 

 

1.3 双密码

相比于一个用户只有一个密码最大优点就是:修改密码不会导致应用不可用,那么应用就可以自 动使用副密码(副密码和当前主密码保持一致)连接数据库。确保业务的不中断。

 

1.4 角色

同Oracle角色。

  1)创建一个角色
  >create role '角色1';

  2)为这个角色赋予相应权限
  >grant insert,update on *.* to '角色1';

  3)创建一个用户
  >create user '用户1' identified by '用户1的密码';

  4)为这个用户赋予角色的权限
  >grant '角色1' on *.* to '用户1';
  执行完上面4步,用户1就拥有了插入与更新的权限

  5)再创建1个用户
  >create user '用户2' identified by '用户2的密码';

  6)为这个用户赋予同样的角色
  >grant '角色1' on *.* to '用户2'
  执行完上面2步,用户2也用了角色1的权限,即插入与更新
  查看用户权限,执行以下命令:
  >show grants for '用户名';

  7)启用角色,设置了角色,如果不启用,用户登录的时候,依旧没有该角色的权限
  >set default role '角色名' to '用户名';

  8)如果一个用户有多个角色,使用以下命令
  >set default role all to '用户名';
  MySQL中与用户角色相关的表:mysql.default_roles、mysql.role_edges

  9)撤销权限
  >revoke insert,update on *.* from '角色名';

 

二、存储引擎方面

2.1 自增列

MySQL8.0在自增列方面也有新特性,它会在每次值修改时,将值写入redo log,并在CKPT时写入存储引擎私有的系统表中。消除了以往重启实例后自增列不连续的问题。

2.2 数据字典

https://www.cnblogs.com/DataArt/p/10240194.html

在MySQL中,数据字典信息内容就包括表结构、数据库名或表名、字段的数据类型、视图、索引、表字段信息、存储过程、触发器等内容。

5.7中:ibdata1和frm中存放数据字典信息;

8.0中:取消了frm,以innodb表存储字典数据,位于msyql数据库下,对外不可见。

在之前版本中,数据字典信息不一定是存放于表中,所以在获取数据字典信息时候,不仅仅是查表操作。例如读取数据库表结构信息,底层其实是读取.frm文件来获得,是一个文件打开读取的操作。而在新版本中,数据字典信息都可以通过直接查表的方式获取,替代那些获取信息慢的方式。

2.3 DDL原子性

https://www.yht7.com/news/138049

MySQL5.7执行drop命令 drop table t1,t2; 如果t1存在,t2不存在,会提示t2表不存在,但是t1表仍然会被删除。

MySQL8.0执行同样的drop命令,会提示t2表不存在,而且t1表不会被删除,保证了原子性。

 

2.4 undo空间自动回收

 

 

在8.0.2版本默认值由OFF变为ON,默认开启undo日志表空间自动回收。

innodb_undo_tablespaces参数在8.0.2版本默认为2,当一个undo表空间被回收时,还有另外一个提供正常服务。

innodb_max_undo_log_size参数定义了undo表空间回收的最大值,当undo表空间超过这个值,该表空间被标记为可回收。

2.5 redo、undo加密

 

 

 

三、SQL方面

3.1 窗口函数

https://www.cnblogs.com/DataArt/p/9961676.html

3.2 隐藏索引

https://blog.csdn.net/horses/article/details/85038949

官方定义:在 MySQL 8.0 中,索引可以被“隐藏”和“显示”。当对索引进行隐藏时,它不会被查询优化器所使用。我们可以使用这个特性用于性能调试,例如我们先隐藏一个索引,然后观察其对数据库的影响。如果数据库性能有所下降,说明这个索引是有用的,然后将其“恢复显示”即可;如果数据库性能看不出变化,说明这个索引是多余的,可以考虑删掉。

主键不能设置为隐藏(包括显式设置或隐式设置)。

使用方法:

1. 创建隐式索引
CREATE INDEX idx_name ON stu (sname) INVISIBLE;
ALTER TABLE stu ADD INDEX idx_age(sage) INVISIBLE;

2. 查看某表的索引显式或隐式情况
SELECT INDEX_NAME, IS_VISIBLE FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'school' AND TABLE_NAME = 'stu';
+------------+------------+
| INDEX_NAME | IS_VISIBLE |
+------------+------------+
| idx_name   | NO         |
| idx_age    | NO         |
| idx_teacher| YES        |
+------------+------------+

四、其他

4.1 参数修改持久化

MySQL 8.0版本支持在线修改全局参数并持久化,通过加上PERSIST关键字,可以将修改的参数持久化到新的配置文件(mysqld-auto.cnf)中,重启MySQL时,可以从该配置文件获取到最新的配置参数。

系统会在数据目录下生成一个包含json格式的mysqld-auto.cnf 的文件,格式化后如下所示,当my.cnf 和**mysqld-auto.cnf **同时存在时,后者具有更高优先级。

4.2 字符集

从 MySQL 8 开始,使用 utf8mb4 作为 MySQL 的默认字符集。

4.3 JSON

MySQL 8 大幅改进了对 JSON 的支持,添加了基于路径查询参数从 JSON 字段中抽取数据的 JSON_EXTRACT() 函数,以及用于将数据分别组合到 JSON 数组和对象中的JSON_ARRAYAGG() JSON_OBJECTAGG() 聚合函数。

 

 

 

 

posted @ 2021-10-29 09:39  西泽Xiz  阅读(161)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css