MySql 5.7 新特性概览
安全的提升
1.1 在Mysql 8版本中,caching_sha2_password 是一个缺省的认证插见.5.7 版本的客户端支持 caching_sha2_password 的客户端认证。
1.2 用户表mysql.user要求plugin字段非空,且默认值是mysql_native_password,并且不再支持mysql_old_password
1.3 增加了密码过期特性。
1.4 管理员可以对普通用户加锁/解锁来控制用户的访问权限
1.5 为更容易支持安全连接,使用OpenSSL编译的MySQL服务器可以在启动时自动生成SSL和RSA证书以及密钥文件
1.6 使用 mysqld --initialize 代替 mysql_install_db 对数据库进行初始化。
a 只创建一个 root账号,并且生成一个临时的标记为过期密码
b 不创建其他账号
c 不创建test 数据库 SQL mode的变换
2.1 默认的SQL_MODE:ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, and NO_ENGINE_SUBSTITUTION.
a 语句:SELECT deptno,ename,max(sal) FROM emp GROUP BY deptno; 在mysql5.6中可以正常执行,但在mysql5.7中会报语义异常。观察发现:ename 即不在聚集函数中,也没有出现在group by list中。对于语义限制比较严谨的数据库,如Oracle是不支持select target list中出现语义不明确的列,这样的语句在这些数据库中是会被报错的,这也是SQL92的标准。所以从MySQL 5.7版本开始修正了这个语义,就是我们所说的ONLY_FULL_GROUP_BY语义。
b STRICT_TRANS_TABLES 是说要存储的字段的长度大于字段定义的大小,直接报错而非像5.6版本以及之前,截断数据进行存储,同时抛出一个warning
2.2 online ddl 支持 rename index name。更改是以 in place方式进行的,不会伴随table-copy的操作。
2.3 新增内置的full text 插件,支持中文 ,韩文,日文全文索引
InnoDB 功能的增强
3.1 以 in-place 方式动态修改 varchar 长度大小。但存在限制,即表示 varchar 列长的字节不能变化。(专门存在一或两个字节记录 varchar 列的长度。varchar列的长度在0-255字节长度时,只需要一个字节记录 varchar 列的长度;varchar列的长度超过255字节长度时,需要两个字节记录 varchar 列的长度。)如果字段的长度从254增到256时就不能使用in-place算法,必须使用copy算法,否侧报错.需要注意的是 减小 varchar(N)长度的大小必须使用copy类型。
3.2 临时表
通过对CREATE TABLE, DROP TABLE, TRUNCATE TABLE, and ALTER TABLE 语句的优化, 提升了涉及临时表的DDL语句的性能。
临时表的元数据信息不再存储 InnoDB 系统表中,而是记录到新表 INNODB_TEMP_TABLE_INFO中。
3.3 临时表空间
新增一个独立的表空间用来存储非压缩的临时表。Mysql启动时,这个临时表空间会被自动创建。可以通过innodb_temp_data_file_path定义临时表空间的路径。
3.4 新增临时表的undo日志
针对临时表及相关对象引入新的 non-redo undo log,存放在临时表空间。该类型的undo log非 redolog, 因为临时表在数据库崩溃后不需要恢复,也就无需redo logs,避免了写relog相关的io,从而提高了性能。
3.5 新增空间类型 DATA_GEOMETRY
InnoDB 现在支持 MySQL-supported 空间数据库类型。之前版本,InnoDB使用binary BLOB 类型存储空间类型数据。现在空间数据类型被映射到了一个InnoDB内部数据类型DATA_GEOMETRY.
3.6 innochecksum 功能被提升
innochecksum--离线的InnoDB文件校验工具,新增了新的选择项和扩展的功能
3.7 对Fusion-io NVM 文件系统的优化
Linux系统中Fusion-io Non-Volatile Memory (NVM)文件系统提供了原子写能力,使InnoDB的doublewrite变得冗余。
因此,如果Fusion-io设备支持原子写, MySQL系统会自动关闭doublewrite,减少IO,提升性能。
3.8 支持移动表空间 Transportable Tablespace
简化了分区表的备份过程,并支持在MySQL实例之间复制分区表和单个表分区。
3.9 支持动态调整 innodb_buffer_pool_size
支持在不重启系统的情况下动态调整innodb_buffer_pool_size。resize的过程是以chunk为单位迁移pages到新的内存空间。
chunk的大小可通过innodb_buffer_pool_chunk_size配置。
迁移进度可以通过Innodb_buffer_pool_resize_status 查看。
3.10 InnoDB在创建或重建索引时执行批量加载。这种创建索引的方法称为“sorted index build”。这种增强也适用于全文索引,它提高了索引创建的效率。在排序索引构建期间,innodb_fill_factor定义了每个页面上的空间百分比是用来填充数据的,剩余空间预留给未来索引增长
3.11 新增一个新的日志记录类型(MLOG_FILE_NAME)用于标识自上次检查点以来被修改的表空间。这个增强简化了表空间的恢复。
3.12 支持truncate undo logs,相关启用参数 innodb_undo_log_truncate
3.13 支持本地分区。在之前版本中,InnoDB 依赖 ha_partition handler,它会为每一个分区创建一个 handler 对象。对于本地分区,InnoDB分区表只是用一个单独的 partition-aware handler 对象。这样的分区表功能增强节约分区表使用的内存。
3.14 支持 General Tablespaces。可以在MySQL数据目录之外创建,能够容纳多个表,支持所有行格式的表
3.15 InnoDB表的隐式默认行格式为DYNAMIC。相关参数 innodb_default_row_format
3.16 MySQL 5.7.11 开始,InnoDB支持file-per-table表空间的静态数据加密 支持JSON类型
MySQL 5.7.8开始支持本地化JSON类型。JSON值不是以string类型存储的,而是以内部的binary格式存储,有利于快速读取。
MySQL 5.7.8开始提供了一些与JSON相关的函数:
Functions that create JSON values: JSON_ARRAY(), JSON_MERGE(), and JSON_OBJECT().
Functions that search JSON values: JSON_CONTAINS(), JSON_CONTAINS_PATH(), JSON_EXTRACT(), JSON_KEYS(), and JSON_SEARCH().
Functions that modify JSON values: JSON_APPEND(), JSON_ARRAY_APPEND(), JSON_ARRAY_INSERT(), JSON_INSERT(), JSON_QUOTE(), JSON_REMOVE(), JSON_REPLACE(), JSON_SET(), and JSON_UNQUOTE().
Functions that provide information about JSON values: JSON_DEPTH(), JSON_LENGTH(), JSON_TYPE(), and JSON_VALID(). sys schema
MySQL 5.7 新增加了sys schema,sys schema方便性能调优和问题定位。 Optimizer
EXPLAIN 可以通过指定会话id 获取该会话执行sql的执行计划。
增强了hint的功能 Triggers
Mysql 5.7之前版本,对于触发器事件(INSERT, UPDATE, DELETE)和操作时间(BEFORE, AFTER)的组合,表最多只能有一个触发器。这个限制已经解除,允许多个触发器。 Logging
Mysql 5.7之前版本,在Unix和类Unix系统上,MySQL将错误日志发送到syslog是通过mysqld_safe捕获错误输出然后传递到syslog来实现的。新的版本支持将错误日志输出到syslog,且适用于windows系统,只需要通过简单的参数(log_syslog等)配置即可
Mysql客户端现在有一参数--syslog ,该参数可将在交互式模式下执行过的命令输出到syslog中。对于匹配“ignore”过滤规则(可通过 –histignore选项或者 MYSQL_HISTIGNORE环境变量进行设置)的语句不会被记入 Generated Columns
在MySQL 5.7中,支持两种Generated Column,
1 Virtual Generated Column :只将Generated Column保存在数据字典中表的元数据,每次读取该列时进行计算,并不会将这一列数据持久化到磁盘上;
注意:MySQL 5.7.8 以前 虚拟列字段不支持创建索引。5.7.8之后Innodb支持在虚拟列创建辅助索引。
2 Stored Generated Column : 将Column持久化到存储,会占用一定的存储空间。与Virtual Column相比并没有明显的优势,因此,MySQL 5.7中,不指定Generated Column的类型,默认是Virtual Column。 Index condition pushdown support for partitioned tables
在MySQL 5.7中,分区表也开始支持ICP特性 Master dump thread improvements
在MySQL 5.7.2之前,转储线程在每次读取事件时都对二进制日志进行锁定;在MySQL 5.7.2或更高版本中,只有在最后一次成功写入事件结束时读取位置时才持有此锁。
MySql 5.7 新特性概览的更多相关文章
- 你不知道的JavaScript--Item24 ES6新特性概览
ES6新特性概览 本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代 ...
- [转帖 ]MySQL 5.7 新特性 JSON
MySQL 5.7 新特性 JSON 的创建,插入,查询,更新 作者: 我不是鱼 (2016-08-31 16:13)分类: MySQL 标签: MySQL JSON MySQL JSON 应用 ...
- Mysql 8.0 新特性测试
Mysql 8.0 新特性测试 Role MySQL8.0版本添加了role特性,role是一种逻辑概念是权限的集合,可以将一个或以上的权限赋予给role,再将role赋给user.Oracle,Po ...
- C# 8.0 的新特性概览和讲解
本文转自 https://blog.csdn.net/hez2010/article/details/84036742 C# 8.0 的新特性概览和讲解 前言 新的改变 可空引用类型(Nullable ...
- MySQL 8.0 新特性梳理汇总
一 历史版本发布回顾 从上图可以看出,基本遵循 5+3+3 模式 5---GA发布后,5年 就停止通用常规的更新了(功能不再更新了): 3---企业版的,+3年功能不再更新了: 3 ---完全停止更新 ...
- MySQL 5.7新特性之Generated Column(函数索引)
MySQL 5.7引入了Generated Column,这篇文章简单地介绍了Generated Column的使用方法和注意事项,为读者了解MySQL 5.7提供一个快速的.完整的教程.这篇文章围绕 ...
- 初识 MySQL 5.6 新特性、功能
背景: 之前介绍过 MySQL 5.5 新功能.参数,现在要用MySQL5.6,所以就学习和了解下MySQL5.6新的特性和功能,尽量避免踩坑.在后续的学习过程中文章也会不定时更新. 一:参数默认值的 ...
- MySQL 5.7新特性之generated column
MySQL 5.7引入了generated column,这篇文章简单地介绍了generated column的使用方法和注意事项,为读者了解MySQL 5.7提供一个快速的.完整的教程.这篇文章围绕 ...
- MySQL 5.6新特性 -- Multi-Range Read
如果基表很大,数据没有被缓存,在二级索引上使用范围扫描读取行可能会导致大量的随机磁盘访问.使用Multi-Range Read新特性,mysql可以减少对磁盘的随机读的次数:首先,mysql只是扫描索 ...
随机推荐
- 普通socket与netty服务端交互
Socket socket = new Socket(host, port);OutputStream out = socket.getOutputStream();ByteBuffer header ...
- Linux网络编程:socket文件传输范例
基于TCP流协议的socket网络文件传输Demo: 实现:C语言功能:文件传输(可以传任何格式的文件) /********************************************** ...
- Cassandra的数据模型的理解
Cassandra属于NoSQL数据库,NoSQL和传统关系型数据库不同,NOSQL偏好数据冗余,因为NoSQL一般无法做表关联查询. (1) keySpace 基本上可以将Keyspa ...
- Revit中如何给不同构件着色
在Revit构件密集,默认的显示模式难以区分不同构件的区别,比如建筑立面有很多不同的机电管道,风管.水管,电缆桥架等,可一个给不同的机电管线添加不同的颜色,以示其区别,如下图所示,完成着色后,各种不同 ...
- PPPoE图解
- 解决Nginx的13: Permission denied) while connecting to upstream
一.问题 做Nginx负载的时候,经常遇到这样的情况: // :: [crit] #: * connect() to failed (: Permission denied) while connec ...
- AutoMapperExtension
using System; using System.Collections.Generic; using System.Linq; using AutoMapper; using System.Co ...
- python3用BeautifulSoup用re.compile来匹配需要抓取的href地址
# -*- coding:utf-8 -*- #python 2.7 #XiaoDeng #http://tieba.baidu.com/p/2460150866 #标签操作 from bs4 imp ...
- Mongodb 笔记 - 性能及Java代码
性能 以下数据都是在千兆网络下测试的结果 写入 数据量的增大会导致内存占满, 因为mongodb会将数据尽可能地载入内存, 索引占用的空间也很可观非安全模式下, 速度取决于内存是否占满能差一个数量级, ...
- EntityFramework中常用的数据删除方式
最近在学EF,目前了解到删除操作有三种方式, 第一,官方推荐的先查询数据,再根据查询的对象,删除对象. 这是第一种,官方推荐 第二,自己创建一个对象,然后附加,然后删除. 这是第二种 第三,自己创建对 ...