- 工信部备案号 滇ICP备05000110号-1
- 滇公安备案 滇53010302000111
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
MySQL 8.0版本首次发布于2018年下旬,目前已经更新至8.0.26小版本。许多人在首次听到8.0时,常会感到自己错过了不少内容,毕竟目前最常用的版本仍是5.7。MySQL的版本差异较大,从下图可以看出,6版本被定位为过渡版本,旨在引入“更加频繁和及时的MySQL服务器版本”,而7版本则专门为集群版本预留。因此,8.0版本成为了MySQL常用应用场景的下一个重要版本号。
MySQL8.0除了给人以版本跨度大的感觉外,确实也做出了很多功能特性的新增或优化,下面蓝队云将选取部分新特性并通过介绍使大家能够对新版本的MySQL有更好的了解。
一、My SQL数据字典
数据字典是数据库重要的组成部分,是数据库中各类元数据的集合,在MySQL8.0之前,数据库的数据字典。
主要由以下几部分组成:
frm 、.opt 、.par 、.TRN 、.TRG等与表、库、分区、触发器相关的操作系统文件;
information_schema中的非InnoDB系统表;
information_schema中的InnoDB系统表
这种数据字典被分布到多个地方的方式,并不利于元数据的统一管理,同时由于操作系统文件以及非InnoDB的系统表,均不支持事务,也影响到了MySQL DDL的ACID。因此在MySQL在8.0版本直后对于数据字典,做出了比较大的改进,一方面是移除了.frm 、.opt 、.par 、.TRN 、.TRG等操作系统文件,另一方面是将数据字典统一改进为InnoDB存储引擎存储。设计理念参照了Oracle数据库的方式,将元数据信息存放在基表中,然后通过视图的方式提供给用户查询。因此在8.0版本的information_schema中,我们可看到的数据字典信息如下:
新的数据字典为MySQL带来两个积极的变化,一就是这种直接查表并且可利用新增的数据字典缓存的访问方式提升了INFORMATIONS_SCHEMA的查询性能,二是对原子DDL的支持,即在DDL操作过程中出现错误的时候,是可以完整回退的,这在之前版本的DDL操作中是不支持的。
二、原子DDL
在8.0以前的版本中,MySQL是不支持原子DDL的,也就意味着一个DROP TABLE tab1,tab2;的语句由可能由于服务器crash或其他异常错误导致部分成功部分失败。而随8.0中数据字典的改进,数据字典的更新,存储引擎操作,写⼆进制日志结合成了一个事务,也就是实现了对原子DDL的支持。
其具体过程如下:
Prepare:创建需要的对象,并将ddl日志写入到mysql.innodb_ddl_log;ddl日志记录了如何前滚和回滚ddl操作。
Perform:执行ddl操作。
Commit:更新数据字典并提交。
post-ddl:重播并从mysql.innodb_ddl_log表格中删除DDL⽇志。为确保回滚可以安全执⾏⽽不引⼊不⼀致性,在此最后阶段执⾏⽂件操作(如重命名或删除数据文件)。这一阶段还从 mysql.innodb_dynamic_metadata的数据字典表删除的动态元数据为了DROP TABLE,TRUNCATE和其它重建表的DDL操作。
原子DDL对于MySQL与其说是新特性,但更像是修复了8.0以前版本中的缺陷,使用户对DDL操作的过程更为放心。
三、索引优化
隐藏索引、降序索引、函数索引再8.0版本中纷纷登场,熟悉Oracle的同学对这3中索引一定也不陌生,甚至在MySQL中的创建语法都是和Oracle相同的,此处就不再赘述。隐藏索引主要起到灰度的作用,可以利用其特性减少索引回收及发布可能带来的风险,在运维过程中是种比较常用的手段。降序索引则针对具体的业务场景,配合特定的SQL使用可以大幅减少排序带来的成本。而函数索引就更为灵活了,不过在Oracle不推荐使用函数索引,在MySQL中则更不推荐使用,函数索引作为临时手段可以救火,但根本还是应从设计层面出发。
四、账户与安全
在MySQL账户和安全性方面,8.0版本也做出了一定程度的优化。
主要可分为以下几个部分:
1. 创建及授权
在MySQL5.7的版本可以通过一条语句完成账户的创建授权操作
grant all privileges on *.* to '用户名'@'主机' identified by '密码';
在MySQL8.0则被拆成了两步执行
create user '用户名'@'主机' identified by '密码';
grant all privileges on *.* to '用户名'@'主机';
2. 认证插件更新
MySQL8.0版本的默认认证插件由mysql_native_password改为了caching_sha2_password,因此使用NAVICAT之类客户端工具时需可能会遇到1251的认证错误。
3. 口令管理
新增了以下参数来控制口令修改策略
password_history:修改密码不允许与最近几次使用或的密码重复;
password_reuse_interval:修改密码不允许与最近多少天的使用过的密码重复;
password_require_current:修改密码是否需要提供当前的登录密码;
4. 角色
可以使用create role命令创建角色并对角色再进行多个权限的grant授予,最后再将角色赋予用户,通过这种方式,对用户权限的管理也变得更为清晰易操作。
账户安全这部分,给人的感受也是越来越接近Oracle数据库,总的来说目的还是为了提升其安全性,但目前来看,认证插件遇到的问题还是较多的,主要原因在于有些常用的测试或管理工具还未能及时支持caching_sha2_password这种认证方式,因此很多环境再8.0仍然保持5.7的mysql_native_password认证设置。
除以上介绍的内容外,MySQL在8.0中也新增了很多JSON函数,使得普通格式数据可以方便快捷的转换为JSON数据,同时也可对JSON格式数据进行判断、校验、合并提取等操作。SQL语法上也新增了with as的通用表达式。引擎方面对于Innodb引擎也有了较多的增强,如自增列持久化、死锁检测,甚至可以通过memcached实现类似NOSQL的简单get操作。运维方面也增加了资源管理的功能,REDO及UNDO的使用也做出优化。总之MySQL 8.0在使用上带来的变化还是非常丰富多彩的,我们应在大版本的迭代过程中,关注基础软件做出的积极调整,并合理的将其运用到系统建设工作中。
想了解更多技术小分享欢迎上蓝队云官网查询,更多免费技术学习文档,蓝队云期待与您一起探索。
售前咨询
售后咨询
备案咨询
二维码
TOP