MySQL 8.0新增特性详解

1. MySQL8.0的版本历史

2016-09-12第一个DM(development milestone)版本8.0.0发布

2018-04-19第一个GA(General Availability)版本开始,8.0.11发布

2018-07-27 下一个GA版本,8.0.12发布

2018-10-22 下一个GA版本,8.0.13发布

2019-01-21 下一个GA版本,8.0.14发布

最新的GA版本为8.0.15,于2019-02-01发布

最近待GA的版本为8.0.16, 8.0.17,

从中可以看出,大概每1~3个月一个版本。

2. MySQL8.0中新增的特性

事务性数据字典

数据字典表以InnoDB表存储字典数据,位于mysql数据库下,对外不可见。有专门的表空间mysql.idb,位于数据目录下。但是可以通过informaction_schema下面的一些表来查询字典数据。

在以前的版本中,字典数据以元数据文件、非事务表等来存储。现在这些元数据文件被删除了。比如:

.frm, .par, .trn, .isl, .db.opt等都在MySQL8.0中不存在了。

原子DDL

事务性数据字典的引入,使得原子DDL成为可能。作为事务要不提交,要不回滚。分为表级和非表级语句,表级支持InnoDB。非表级包括:create, drop等语句。

安全和账号管理

Mysql系统数据库下的权限表现在都是InnoDB的,以前是MyISAM的,对于多个用户进行操作时会出现部分成功,部分失败的情况。现在要不成功,要不rollback。

新的caching_sha2_password认证插件作为默认的认证插件,比mysql_native_password更安全,性能更好。但可能在现网会出现一个连接相关的问题。

支持角色(role)

对于密码管理更加严格控制,可以维护密码历史信息。启用密码重用策略。

资源管理

支持资源组的创建和管理,能将运行的线程分配给特定的资源组。

InnoDB增强

自增列方面。现在自增列计数器会在每次值修改时,将值写到REDO LOG中,并且在CHECKPOINT时写到存储引擎私有的系统表中。这就消除了以往重启实例自增列不连续的问题。

当索引损坏时,会把损坏标识写到redo log。在checkpoint时会将内存的损坏标识数据写到存储引擎私有的系统表中。

InnoDB memcached插件支持多个get操作(在单个memcached查询中获取多个键值对)和范围查询。

新的动态变量innodb_deadlock_detect,可以禁用死锁检查。在高并发的系统中,无数个线程等待同一个锁,死锁检查可能会引起系统宕机。有时,禁用死锁检查更有效。当死锁发生时,可以依赖innodb_lock_wait_timeout设置让事务回滚。

新的information_schema.innodb_cached_indexes表可以报告每个索引在bufferpool中的索引页的数量。

InnoDB临时表现在创建在共享的临时表空间中。

支持redo log和undo log的加密

对于select…for share和select…for update 锁读语句,支持nowait和skip locked选项。Nowait表示如果请求的行被去其他事务锁住了立即返回。SKIP LOCKED则会从结果集中移除上锁的行。

InnoDB存储引擎使用MySQL的数据字典,而不是用自己的和引擎相关的数据字典。

mysql库的系统表和数据字典表创建在单独的InnoDB表空间中,文件名为mysql.ibd. 以前这些表都是创建在各自的InnoDB表空间中。

字符集支持

默认字符集从latin1变成了utf8mb4.  对于utf8mb4字符集增加了新的比较规则,比如utf8mb4_ja_0900_as_cs。

JSON增强

数据类型支持

MySQL支持将字符常量或者表达式作为数据类型的默认值。包括能将表达式作为BLOB, TEXT, GEOMETRY, JSON等数据类型的默认值,这在以前是不可以的。

优化器

通用表表达式

在SELECT等语句前,使用WITH字句来对临时结果集进行命名。

窗口函数

MySQL现在支持窗口函数,在一个查询中对每行进行计算。这些函数包括RANK(), LAG(), NTILE()。另外,有几个聚合函数也能用作窗口函数。比如SUM(),AVG()。

横向派生表(Lateral derived tables)

支持正则表达式

内部临时表

内存内部临时表,默认的存储引擎从MEMORY变成了TempTable。TempTable对于VARCHAR和VARBINARY字段存储更高效。

Internal_tmp_mem_storage_engine:该变量用来定义内存内部临时表使用哪个引擎。允许取值有TempTable(默认)和MEMORY。

Temtable_max_ram: 内存内部临时表超过这个值就会将数据存储到磁盘上。

日志记录

错误日志模块使用MySQL组件架构重写了,使用内置的组件来实现错误日志。

另外,还有一个可加载的JSON日志记录器。 要控制启用哪些日志组件,使用 log_error_services 系统变量。

备份锁

引入了一种新的备份锁(backup lock),它允许在online备份的时候进行DML操作,同时可防止快照不一致。备份锁由lock instance for backup和unlock instance语法支持。使用这些语句需要BACKUP_ADMIN权限。

原来的extrabackup等备份软件是不是应该改写,不要使用flush table with read lock这样的语句来上锁。

当有大事务时,会hung住,无法备份。

如果采用lock instance for backup则没有问题。

复制增强

支持使用压缩格式,对JSON文档的部分更新记录binlog,能节省空间。如果使用的STATEMENT格式的binlog,该功能自动开启,或者通过binlog_row_value_options系统变量设为PARTIAL_JASON来开启。

连接管理

允许配置一个专门端口用于管理连接,当连接数打满时可以用于连接数据库进行管理。

需要设置admin_address,默认该值为空。

使用的端口默认为33062, 由admin_port来设置。

该端口的没有连接数的限制。

需要有SERVICE_CONNECTION_ADMIN的权限

Create_admin_listener_thread系统变量用来决定是用普通连接的监听线程还是采用自己专用的线程。默认值为普通监听线程。

操作如下:

 1 mysql> show variables like ‘admin_%‘;
 2
 3 +---------------+---------------+
 4
 5 | Variable_name | Value         |
 6
 7 +---------------+---------------+
 8
 9 | admin_address | 192.168.1.187 |         //这个IP地址是服务器的地址,不是客户端的。一定要设置这个变量
10
11 | admin_port    | 33062         |
12
13 +---------------+---------------+
14
15 2 rows in set (0.00 sec)

然后将max_connections调小,制造连接数打满的场景。

 1 mysql> set global max_connections=30;
 2
 3 Query OK, 0 rows affected (0.00 sec)
 4
 5 mysql> show variables like ‘max_connections‘;
 6
 7 +-----------------+-------+
 8
 9 | Variable_name   | Value |
10
11 +-----------------+-------+
12
13 | max_connections | 30    |
14
15 +-----------------+-------+
16
17 1 row in set (0.00 sec)
18
19 nohup mysql -h192.168.1.187  -P3306 -uroot -p****** -NBe ‘select sleep(2000)‘ &
20
21 mysql: [Warning] Using a password on the command line interface can be insecure.
22
23 ERROR 1040 (HY000): Too many connections

此时,发现还可以用管理端口进行连接,并且没有数量限制。

mysql -h192.168.1.187  -P33062 -uroot -p******

插件

以前MySQL的插件可以用C和C++编写。现在插件使用的MySQL头文件是c++代码,意味着现在的插件必须用C++,不能用C编写。

HDC.Cloud 华为开发者大会2020 即将于2020年2月11日-12日在深圳举办,是一线开发者学习实践鲲鹏通用计算、昇腾AI计算、数据库、区块链、云原生、5G等ICT开放能力的最佳舞台。

欢迎报名参会https://www.huaweicloud.com/HDC.Cloud.html?utm_source=&utm_medium=&utm_campaign=&utm_content=techcommunity

原文地址:https://www.cnblogs.com/huaweicloud/p/12229548.html

时间: 2024-10-08 09:15:49

MySQL 8.0新增特性详解的相关文章

【PHP系列】PHP 7.0新增特性详解

开始介绍PHP7.0新特性,具体的可以参照官网的介绍,我来挑一些给大家详细讲解下 http://php.net/manual/en/migration70.new-features.php 1. ?? 运算符(NULL 合并运算符) $a = $_GET['a'] ?? 1; 它相当于: $a = empty($_GET['a']) ? 1 : $_GET['a']; 我们知道三元运算符是可以这样用的: $a ?: 1 但是这是建立在 $a 已经定义了的前提上.新增的 ?? 运算符可以简化判断.

Servlet 3.0 新特性详解

转自:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/ Servlet 3.0 新特性详解 张 建平2010 年 4 月 23 日发布 WeiboGoogle+用电子邮件发送本页面 6 Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发和部署.其

【转】C#各个版本中的新增特性详解

转自:http://www.cnblogs.com/knowledgesea/p/6694979.html 序言 自从2000年初期发布以来,c#编程语言不断的得到改进,使我们能够更加清晰的编写代码,也更加容易维护我们的代码,增强的功能已经从1.0搞到啦7.0甚至7.1,每一次改过都伴随着.NET Framework库的相应支持,也不断的带给我们期待与惊喜.下面我们就对c#一路走到现在,做一个回顾与学习. C#语言目标与前行 c#的设计目标是有以下几点: 旨在是一种简单,现代,通用的面向对象编程

Servlet 3.0 新特性详解 (转载)

原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/ Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发和部署.其中有几项特性的引入让开发者感到非常兴奋,同时也获得了 Java 社区的一片赞誉之声: 异步处理支持:有了该特性,Servlet

[转]Servlet 3.0 新特性详解

原文地址:http://blog.csdn.net/xiazdong/article/details/7208316 Servlet 3.0 新特性概览 1.Servlet.Filter.Listener无需在web.xml中进行配置,可以通过Annotation进行配置: 2.模块化编程,即将各个Servlet模块化,将配置文件也分开配置. 3.Servlet异步处理,应对复杂业务处理: 4.异步Listener,对于异步处理的创建.完成等进行监听: 5. 文件上传API简化: tomcat

JavaWeb学习之Servlet3.0新特性详解

异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该 Servlet 线程.在接收到请求之后,Servlet 线程可以将耗时的操作委派给另一个线程来完成,自己在不生成响应的情况下返回至容器.针对业务处理较耗时的情况,这将大大减少服务器资源的占用,并且提高并发处理速度. 新增的注解支持:该版本新增了若干注解,用于简化 Servlet.过滤器(Filter)和监听器(Listener)的声明,这使得 web.xml 部署描述文件从该版本开始不再

Java—Java 8 新增特性详解(Predicate和Stream)

Predicate接口 Predicate接口介绍 ??Predicate是函数式接口,可以使用Lambda表达式作为参数.Java 8为集合Collection新增了removeIf(Predicate filter)方法,可以批量删除符合filter条件的所有元素. Predicate接口使用范例 测试Collection的removeIf()方法. 示例1 1)运行类: public class DemoApplication { public static void main(Strin

Mysql 三大特性详解

Mysql 三大特性详解 Mysql Innodb后台线程 工作方式 首先Mysql进程模型是单进程多线程的.所以我们通过ps查找mysqld进程是只有一个. 体系架构 InnoDB存储引擎的架构如下图所以,是由多个内存块组成的内存池,同时又多个后台线程进行工作,文件是存储磁盘上的数据. 后台线程 上面看到一共有四种后台线程,每种线程都在不停地做自己的工作,他们的分工如下: Master Thread: 是最核心的线程,主要负责将缓冲池中的数据异步刷新的磁盘,保证数据的一致性,包括脏页的刷新.合

PHP5.2至5.6的新增功能详解

截至目前(2014.2), PHP 的最新稳定版本是 PHP5.5, 但有差不多一半的用户仍在使用已经不在维护 [注] 的 PHP5.2, 其余的一半用户在使用 PHP5.3 [注].因为 PHP 那"集百家之长"的蛋疼语法,加上社区氛围不好,很多人对新版本,新特征并无兴趣.本文将会介绍自 PHP5.2 起,直至 PHP5.6 中增加的新特征. PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束 PHP5.2:JSON 支持 PHP5.3:弃用的功能,匿名函数