百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

MySQL 8.0新增特性详解

bigegpt 2024-08-18 14:03 2 浏览

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系统变量用来决定是用普通连接的监听线程还是采用自己专用的线程。默认值为普通监听线程。

操作如下:

mysql> show variables like 'admin_%';

+---------------+---------------+

| Variable_name | Value |

+---------------+---------------+

| admin_address | 192.168.1.187 | //这个IP地址是服务器的地址,不是客户端的。一定要设置这个变量

| admin_port | 33062 |

+---------------+---------------+

2 rows in set (0.00 sec)

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

mysql> set global max_connections=30;

Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'max_connections';

+-----------------+-------+

| Variable_name | Value |

+-----------------+-------+

| max_connections | 30 |

+-----------------+-------+

1 row in set (0.00 sec)

nohup mysql -h192.168.1.187 -P3306 -uroot -p****** -NBe 'select sleep(2000)' &

mysql: [Warning] Using a password on the command line interface can be insecure.

ERROR 1040 (HY000): Too many connections

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

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

插件

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

相关推荐

悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)

新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...

高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源

凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...

微服务架构实战:商家管理后台与sso设计,SSO客户端设计

SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...

还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑

在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...

Seata源码—6.Seata AT模式的数据源代理二

大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...

30分钟了解K8S(30分钟了解微积分)

微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...

SpringBoot条件化配置(@Conditional)全面解析与实战指南

一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...

一招解决所有依赖冲突(克服依赖)

背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...

你读过Mybatis的源码?说说它用到了几种设计模式

学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...

golang对接阿里云私有Bucket上传图片、授权访问图片

1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...

spring中的资源的加载(spring加载原理)

最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...

Android资源使用(android资源文件)

Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...

如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)

深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...

@Autowired与@Resource原理知识点详解

springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...

java的redis连接工具篇(java redis client)

在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...