MySQL 8.0新增特性详解【华为云技术分享】
欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字“加群”,加入华为云线上技术讨论群;输入关键字“最新活动”,获取华为云最新特惠促销。华为云诸多技术大咖、特惠活动等你来撩!
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 | | +---------------+---------------+ rows in set (0.00 sec)
然后将max_connections调小,制造连接数打满的场景。
mysql> set global max_connections=; Query OK, rows affected (0.00 sec) mysql> show variables like 'max_connections'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | | +-----------------+-------+ row in set (0.00 sec) nohup mysql -h192.168.1. -P3306 -uroot -p****** -NBe 'select sleep(2000)' & mysql: [Warning] Using a password on the command line interface can be insecure. ERROR (HY000): Too many connections
此时,发现还可以用管理端口进行连接,并且没有数量限制。
mysql -h192.168.1. -P33062 -uroot -p******
插件
以前MySQL的插件可以用C和C++编写。现在插件使用的MySQL头文件是c++代码,意味着现在的插件必须用C++,不能用C编写。
私货时间:华为云618大促火热进行中,全场1折起,免费抽主机,消费满额送P30 Pro,点此抢购。
HDC.Cloud 华为开发者大会2020 即将于2020年2月11日-12日在深圳举办,是一线开发者学习实践鲲鹏通用计算、昇腾AI计算、数据库、区块链、云原生、5G等ICT开放能力的最佳舞台。
MySQL 8.0新增特性详解【华为云技术分享】的更多相关文章
- 【PHP系列】PHP 7.0新增特性详解
开始介绍PHP7.0新特性,具体的可以参照官网的介绍,我来挑一些给大家详细讲解下 http://php.net/manual/en/migration70.new-features.php 1. ?? ...
- PHP 7.0新增特性详解
https://www.cnblogs.com/riverdubu/archive/2017/03/22/6434705.html 开始介绍PHP7.0新特性,具体的可以参照官网的介绍,我来挑一些给大 ...
- C#各个版本中的新增特性详解
序言 自从2000年初期发布以来,c#编程语言不断的得到改进,使我们能够更加清晰的编写代码,也更加容易维护我们的代码,增强的功能已经从1.0搞到啦7.0甚至7.1,每一次改过都伴随着.NET Fram ...
- C#各个版本中的新增特性详解【转】
序言 自从2000年初期发布以来,c#编程语言不断的得到改进,使我们能够更加清晰的编写代码,也更加容易维护我们的代码,增强的功能已经从1.0搞到啦7.0甚至7.1,每一次改过都伴随着.NET Fram ...
- Servlet 3.0 新特性详解
转自:http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/#major3 Servlet 是 Java EE 规范体系的重要组成部分,也是 ...
- CSS3新增特性详解(二)
上篇博文主要介绍了CSS3新增特性中的静态特性,比如新的选择器.多背景图.阴影.渐变等.本文主要介绍CSS3中新增的动态特性,如过度.动画.变形等. transitian: -webkit-tran ...
- 【转帖】Servlet 3.0 新特性详解
http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/ Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 ...
- Servlet 3.0 新特性详解 (转载)
原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/ Servlet 3.0 新特性概述 Servlet 3.0 作为 Jav ...
- 海量数据分析更快、更稳、更准。GaussDB(for MySQL) HTAP只读分析特性详解
本文作者康祥,华为云数据库内核开发工程师,研究生阶段主要从事SPARQL查询优化相关工作.目前在华为公司参与华为云GaussDB(for MySQL) HTAP只读内核功能设计和研发. 1. 引言 H ...
随机推荐
- 分布式系统中session一致性问题
业务场景 在单机系统中,用户登陆之后,服务端会保存用户的会话信息,只要用户不退出重新登陆,在一段时间内用户可以一直访问该网站,无需重复登陆.用户的信息存在服务端的 session 中,session中 ...
- HashMap 中的容量与扩容实现,细致入微,值的一品!
前言 开心一刻 巴闭,你的脚怎么会有味道,我要闻闻看是不是好吃的,嗯~~爸比你的脚臭死啦!! …… 高手过招,招招致命 JDK1.8 中 HashMap 的底层实现,我相信大家都能说上来个 一二,底层 ...
- IPv6笔记-地址结构与分类
1.地址基础 IPv6地址由被划分为8个16位块的128位组成. 然后将每个块转换为由冒号符号分隔的4位十六进制数字. 2001::3238:00E1:0063:0000:0000:FEFB 每一块多 ...
- Prometheus客户端开发:腾讯云CLB
一:简介 随着prometheus的使用人群逐渐扩大,官方定义的client exporter虽然能满足我们的大部分需求,但是很多监控还是需要我们自定义开发,以下内容就是基于腾讯云SDK,对腾讯云CL ...
- 护网杯web
首先进入网页后,观察到有sign up 点击sign up 进行注册 再点击sign in 进行登录 进入一个买辣条的界面,可以知道,5元可以买一包大辣条,多包大辣条可以换一包辣条之王,多包辣条之王可 ...
- JS、JQ相关小技巧积攒
JS.JQ相关小技巧积攒,以备不时之需. 1.js 获取时间差:时间戳相减.new Date().getTime() 获得毫秒数,除以(1000*60*60*24) 获得天数. 2.重定向操作:页面 ...
- jenkins里的定时构建
1. 定时构建语法:* * * * * (五颗星,多个时间点,中间用逗号隔开)第一个*表示分钟,取值0~59第二个*表示小时,取值0~23第三个*表示一个月的第几天,取值1~31第四个*表示第几月,取 ...
- 学习Java第一步:安装Intellij IDEA和JDK
注:其实真正学习一门新语言的第一步并不是安装开发工具,我是C#转JAVA,有一点编程经验了,所以可以直接跳过前面几步,直接上IDE. 1.下载IntelliJ IDEA [官网] http://www ...
- [ERROR]element select is not allowed here
问题:在使用IDEA搭建springboot项目的时候,在xml文件中遇到element select is not allowed here错误 原因:xml文件的头部的配置有错误,红框的三个地方命 ...
- 第一篇: openJDK源码编译安装--mac版本
1.为什么要编译JDK 想要一探JDK内部的实现机制,最便捷的路径之一就是自己编译一套JDK,通过阅读和跟踪调试JDK源码去了解Java技术体系的原理,虽然门槛高一点,但肯定比阅读各种书籍,文章,博客 ...