huangxuegang

你要悄悄学php,然后惊艳所有人
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Mysql5.7新增的功能

Posted on 2020-07-14 10:41  一花多叶无菩提  阅读(162)  评论(0)    收藏  举报
  • MySQL 5.7客户端库和客户端程序支持自caching_sha2_passwordMySQL 5.7.23起的 客户端身份验证插件。这提高了MySQL 5.7与MySQL 8.0及更高版本服务器的兼容性
  • 服务器现在要求mysql.user系统表中的帐户行 具有非空plugin列值,并禁用具有空值的帐户
  • MySQL现在使数据库管理员可以建立自动密码过期策略:任何使用密码超过其允许使用期限的帐户连接到服务器的用户都必须更改密码
  • 管理员可以锁定和解锁帐户,以更好地控制谁可以登录
  • 为了更轻松地支持安全连接,使用OpenSSL编译的MySQL服务器可以在启动时自动生成丢失的SSL和RSA证书以及密钥文件,如果未明确为SSL配置所有服务器,则所有服务器如果在数据目录中找到必需的SSL文件,则尝试在启动时自动启用SSL,此外,MySQL发行版包括mysql_ssl_rsa_setup实用程序,可以手动调用该 实用程序来创建SSL和RSA密钥以及证书文件

默认情况下, 使用mysqld --initialize安装的MySQL部署是安全的。已将以下更改作为默认部署特征实现:

    • 安装过程仅创建一个 root帐户, 'root'@'localhost'自动为此帐户生成一个随机密码,并将该密码标记为过期。MySQL管理员必须root使用随机密码进行连接并分配新密码。(服务器将随机密码写入错误日志。)

    • 安装不会创建任何匿名用户帐户。

    • 安装不会创建test 数据库。
  • MySQL企业版现在提供数据屏蔽和取消标识功能。数据屏蔽通过用替代品替换实际值来隐藏敏感信息。MySQL Enterprise Data Masking和De-Identification功能可使用多种方法来掩蔽现有数据,例如混淆(删除识别特征),格式化随机数据的生成以及数据替换或替换。现在,MySQL将授予命名管道上的客户端的访问控制设置为在Windows上成功进行通信所必需的最低限度。较新的MySQL客户端软件无需任何其他配置即可打开命名管道连接。如果不能立即升级旧的客户端软件,named_pipe_full_access_group 则可以使用新的 系统变量为Windows组授予打开命名管道连接的必要权限。完全访问组的成员资格应受到限制且是临时的。
  • 现在,MySQL将授予命名管道上的客户端的访问控制设置为在Windows上成功进行通信所必需的最低限度。较新的MySQL客户端软件无需任何其他配置即可打开命名管道连接。如果不能立即升级旧的客户端软件,named_pipe_full_access_group 则可以使用新的 系统变量为Windows组授予打开命名管道连接的必要权限。完全访问组的成员资格应受到限制且是临时的。
  • SQL模式更改。 STRICT_TRANS_TABLES现在,默认情况 下为事务存储引擎()启用了严格的SQL模式

ONLY_FULL_GROUP_BYSQL模式的 实现 变得更加复杂,不再拒绝以前被拒绝的确定性查询。因此,现在默认情况下启用了此模式,以仅禁止包含不能保证在组内唯一确定的表达式的不确定查询。

的 ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE和 NO_ZERO_IN_DATE现在的SQL模式已被弃用,但默认情况下启用。长期计划是使它们包含在严格的SQL模式中,并在将来的MySQL版本中将它们作为显式模式删除。请参阅 MySQL 5.7中的SQL模式更改

到默认的SQL模式导致违约的变化 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,和 NO_ENGINE_SUBSTITUTION

  • 在线ALTER TABLE。 ALTER TABLE现在支持RENAME INDEX重命名索引的 子句。无需进行表复制操作即可进行更改。它适用于所有存储引擎。请参见 第13.1.8节“ ALTER TABLE语句”
  • ngram和MeCab全文分析器插件。  MySQL提供了一个内置的全文ngram解析器插件,该插件支持中文,日文和韩文(CJK),以及一个可安装的MeCab全文解析器插件,用于日语。

InnoDB增强功能。  这些InnoDB增强功能已添加:

  • VARCHAR可以使用in-place增加列大小 ALTER TABLE,如以下示例所示:

    ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(255);

    只要一VARCHAR 列所需的长度字节数保持不变,这是正确的。对于 VARCHAR大小为0到255个字节的列,需要一个长度的字节来编码该值。对于VARCHAR 大小为256字节或更大的列,需要两个长度的字节。结果,就地 ALTER TABLE仅支持将VARCHAR列大小从0 增大到255字节,或从256字节增大到更大的大小。就地ALTER TABLE不支持增加VARCHAR列,从小于256个字节到等于或大于256个字节的大小。在这种情况下,所需的长度字节数从1更改为2,仅表副本(ALGORITHM=COPY)支持。

    减少VARCHAR使用就地尺寸ALTER TABLE不被支持。减小 VARCHAR大小需要表副本(ALGORITHM=COPY)。

    有关更多信息,请参见 第14.13.1节“在线DDL操作”

  • 对于DDL性能InnoDB临时表是通过优化改进 CREATE TABLE, DROP TABLE, TRUNCATE TABLE,和 ALTER TABLE语句。

  • InnoDB临时表元数据不再存储到InnoDB系统表中。相反,新表 INNODB_TEMP_TABLE_INFO可以为用户提供活动临时表的快照。该表包含有关在给定InnoDB实例中处于活动状态的所有用户和系统创建的临时表的元数据和报告该表是在SELECT 针对它运行第一个语句时创建的

  • InnoDB现在支持MySQL支持的空间数据类型。在此版本之前, InnoDB会将空间数据存储为二进制BLOB数据。 BLOB仍保留基础数据类型,但现在将空间数据类型映射到新的 InnoDB内部数据类型 DATA_GEOMETRY

  • 现在,所有非压缩InnoDB临时表都有一个单独的表空间新表空间总是在服务器启动时重新创建,并且DATADIR默认情况下位于该表空间中新添加的配置文件选项 innodb_temp_data_file_path允许用户定义临时数据文件路径。

  • innochecksum功能通过几个新选项和扩展功能得到了增强。请参见第4.6.1节“ innochecksum-脱机InnoDB文件校验和实用程序”

  • 现在,临时表空间中将同时存在用于普通和压缩临时表以及相关对象的新型非重做撤消日志。有关更多信息,请参见第14.6.7节“撤消日志”

  • InnoDB缓冲池转储和加载操作得到增强。新的系统变量 innodb_buffer_pool_dump_pct允许您指定每个缓冲池中要读取和转储的最近使用页面的百分比。InnoDB后台任务正在执行其他I / O活动时 ,请 InnoDB尝试使用该innodb_io_capacity 设置来限制每秒缓冲池加载操作的数量 

  • 添加了InnoDB对全文分析器插件的支持。有关全文分析器插件的信息,请参见 全文分析器插件和 第28.2.4.4节“编写全文分析器插件”

  • InnoDB支持多个页面清理程序线程,用于从缓冲池实例中刷新脏页面。新的系统变量 innodb_page_cleaners用来指定页面清洁程序线程的数量。默认值1维护先前的配置,其中只有一个页面清洁程序线程。此增强功能基于MySQL 5.6中完成的工作,MySQL 5.6中引入了一个单页清理程序线程以从InnoDB主线程分担缓冲池刷新工作 

  • 在线DDL 支持扩展到常规InnoDB 表和分区的以下操作

  • Linux上的Fusion-io非易失性内存(NVM)文件系统提供了原子 写功能,这使 InnoDB双写缓冲区变得多余。对于位于支持原子写入的Fusion-io设备上的InnoDB 系统表空间文件(ibdata文件),将自动禁用doublewrite缓冲区

  • InnoDB支持分区表和单个 表分区的可 传输表空间功能 此增强功能简化了分区表的备份过程,并允许在MySQL实例之间复制分区表和单个表分区。有关更多信息,请参见 第14.6.1.3节“导入InnoDB表”。 InnoDBInnoDB

  • 该 innodb_buffer_pool_size 参数是动态的,允许您在不重新启动服务器的情况下调整缓冲池的大小。调整大小操作涉及将页面移动到内存中的新位置,它是按块执行的。块大小可以使用新的innodb_buffer_pool_chunk_size 配置选项进行 配置。您可以使用新的Innodb_buffer_pool_resize_status 状态变量监视调整大小的进度 有关更多信息,请参见 联机配置InnoDB缓冲池大小

  • 多线程页面清理程序支持(innodb_page_cleaners)已扩展到关闭和恢复阶段。

  • InnoDB支持使用SPATIAL索引索引空间数据类型,包括 ALTER TABLE ... ALGORITHM=INPLACE用于在线操作(ADD SPATIAL INDEX)。

  • InnoDB在创建或重建索引时执行批量加载。这种创建索引的方法称为“ 排序索引构建 ”此增强功能提高了索引创建的效率,也适用于全文本索引。一个新的全局配置选项 innodb_fill_factor定义了在排序的索引构建期间每个页面上已填充数据的空间的百分比,剩余的空间保留给将来的索引增长。有关更多信息,请参见 第14.6.2.3节“排序的索引构建”

  • 新的日志记录类型(MLOG_FILE_NAME)用于标识自上一个检查点以来已被修改的表空间。此增强功能简化了崩溃恢复期间的表空间发现,并消除了在重做日志应用程序之前对文件系统进行的扫描。有关此增强功能好处的更多信息,请参见 崩溃恢复期间的表空间发现

    此增强功能更改了重做日志格式,要求在升级到MySQL 5.7.5或从MySQL 5.7.5降级之前,请彻底关闭MySQL。

  • 您可以截断驻留在撤消表空间中的撤消日志。使用innodb_undo_log_truncate 配置选项启用此功能 有关更多信息,请参见 截断撤消表空间

  • InnoDB支持本机分区。以前,InnoDB依赖于 ha_partition处理程序,该处理程序为每个分区创建一个处理程序对象。对于本机分区,分区InnoDB 表使用单个可识别分区的处理程序对象。此增强功能减少了分区InnoDB所需的内存量

    从MySQL 5.7.9开始,mysql_upgrade 查找并尝试升级InnoDB使用该ha_partition处理程序创建的分区 同样在MySQL 5.7.9和更高版本中,您可以使用mysql客户端中 按名称升级此类表ALTER TABLE ... UPGRADE PARTITIONING

  • InnoDB支持使用CREATE TABLESPACE语法创建常规表空间

    CREATE TABLESPACE `tablespace_name`
      ADD DATAFILE 'file_name.ibd'
      [FILE_BLOCK_SIZE = n]

    常规表空间可以在MySQL数据目录之外创建,可以容纳多个表,并支持所有行格式的表。

    使用 或 语法将表添加到常规表空间 。 CREATE TABLE tbl_name ... TABLESPACE [=] tablespace_nameALTER TABLE tbl_name TABLESPACE [=] tablespace_name

    有关更多信息,请参见 第14.6.3.3节“常规表空间”

  • DYNAMIC替换 COMPACTInnoDB的隐式默认行格式新的配置选项, innodb_default_row_format指定默认的InnoDB行格式。有关更多信息,请参见 定义表的行格式

  • 从MySQL 5.7.11开始,InnoDB支持针对每表文件表空间的静态数据加密。通过ENCRYPTION在创建或更改InnoDB指定选项来启用加密 此功能依赖于keyring用于加密密钥管理插件。有关更多信息,请参见 第6.4.4节“ MySQL密钥环”和 第14.14节“ InnoDB静态数据加密”

  • 从MySQL 5.7.24开始, 与MySQL捆绑在一起的 zlib库版本从1.2.3版本提高到1.2.11版本。MySQL在zlib库的帮助下实现了压缩。

    如果使用InnoDB压缩表,请参见第2.11.3节“ MySQL 5.7中的更改”以了解相关的升级含义。

JSON支持。  从MySQL 5.7.8开始,MySQL支持本机 JSON类型。JSON值不存储为字符串,而是使用内部二进制格式存储,该格式允许快速读取文档元素。JSON 插入或更新的列中存储的JSON文档会在插入或更新时自动进行验证,其中无效的文档会产生错误。JSON文档被归在创建,并且可以使用大多数比较操作进行比较,例如 =<, <=>, >=<>, !=,和<=>有关受支持的运算符以及MySQL比较JSON时遵循的优先级和其他规则的信息,请参见 JSON值比较和排序

MySQL 5.7.8还引入了许多用于处理JSON的函数这些功能包括此处列出的功能:

在MySQL 5.7.9和更高版本中,您可以将 用作速记 只要列标识符可以在SQL语句中出现的任何地方(包括,和 子句), 它都可以用作列的别名这包括 , , , ,和其它SQL语句。左侧必须是 列标识符(而不是别名)。右侧是带引号的JSON路径表达式,该表达式将针对作为列值返回的JSON文档进行评估。 column->pathJSON_EXTRACT(columnpath)WHEREORDER BYGROUP BYSELECTUPDATEDELETECREATE TABLEJSON

MySQL 5.7.22添加了以下JSON函数:

  • 两个JSON聚合函数 JSON_ARRAYAGG()和 JSON_OBJECTAGG()。 JSON_ARRAYAGG()将列或表达式作为其参数,并将结果聚合为单个JSON数组。该表达式可以求值为任何MySQL数据类型;这不一定是一个JSON值。 JSON_OBJECTAGG()接受两列或表达式,将其解释为键和值;它以单个JSON 对象的形式返回结果有关更多信息和示例,请参见 第12.20节“聚合函数”

  • JSON实用程序功能 JSON_PRETTY()JSON 以易于阅读的格式输出现有值;每个JSON对象成员或数组值都打印在单独的一行上,并且子对象或数组相对于其父对象要有2个空格。

    此函数还可以与可解析为JSON值的字符串一起使用。

    另请参见第12.17.6节“ JSON实用程序函数”

  • JSON实用程序函数 JSON_STORAGE_SIZE(),它在进行任何部分更新之前返回用于JSON文档的二进制表示的存储空间(以字节为单位)(请参阅上一项)。

    此函数还接受JSON文档的有效字符串表示形式。对于这样的值, JSON_STORAGE_SIZE()返回其转换为JSON文档后其二进制表示形式使用的空间。对于包含JSON文档的字符串表示形式的变量, JSON_STORAGE_FREE()返回零。如果无法将其(非null)参数解析为有效的JSON文档,并且NULL该参数为则 任何一个函数都会产生错误 NULL

    有关更多信息和示例,请参见 第12.17.6节“ JSON实用程序函数”

  • 旨在符合RFC 7396的 JSON合并功能 。 JSON_MERGE_PATCH(),当在2个JSON对象上使用时,将它们合并为一个具有以下集合的并集的单个JSON对象:

    • 第一个对象的每个成员,在第二个对象中不存在具有相同键的成员。

    • 第二个对象的每个成员,在第一个对象中没有成员具有相同的键,并且其值不是JSON null文字。

    • 每个成员都具有在两个对象中都存在的键,并且其在第二个对象中的值不是JSON null文字。

    作为这项工作的一部分,该 JSON_MERGE()功能已重命名 JSON_MERGE_PRESERVE()。 JSON_MERGE()仍然被认为是JSON_MERGE_PRESERVE()MySQL 5.7 的别名 ,但现在已被弃用,并且可能在将来的MySQL版本中删除。

    有关更多信息和示例,请参见 第12.17.4节“修改JSON值的函数”

有关和的 更多信息 请参见第12.17.3节“搜索JSON值的函数”有关MySQL 5.7中JSON路径支持的信息,请参见 搜索和修改JSON值另请参见 索引生成的列以提供JSON列索引。 ->JSON_EXTRACT()

  • 系统和状态变量。  现在,性能模式表中提供了系统和状态变量信息,而不是使用 INFORMATION_SCHEMA表来获取这些变量。这也会影响SHOW VARIABLESand SHOW STATUS语句的操作 show_compatibility_56 系统变量的值 会影响系统变量和状态变量语句和表所产生的输出以及所需的特权。有关详细信息,请参见第5.1.7节“服务器系统变量”中对该变量的描述 

    注意
    的默认 show_compatibility_56值为 OFF。需要5.6行为的应用程序应将此变量设置为,ON 直到将它们迁移到系统变量和状态变量的新行为为止。请参见 第25.20节“迁移到性能模式系统和状态变量表”
  • sys模式。  现在sysMySQL发行版包括 架构,该架构是一组对象,可帮助DBA和开发人员解释由性能架构收集的数据。 sys模式对象可用于典型的调整和诊断用例。有关更多信息,请参见第26章,MySQL sys模式

  • 条件处理。  MySQL现在支持堆叠的诊断区域。推入诊断区域堆栈时,第一个(当前)诊断区域将成为第二个(堆叠)诊断区域,并创建一个新的当前诊断区域作为其副本。在条件处理程序中,执行的语句会修改新的当前诊断区域,但是 GET STACKED DIAGNOSTICS可以用于检查堆叠的诊断区域,以获取有关导致处理程序激活的条件的信息,而与处理程序自身内部的当前条件无关。(以前,只有一个诊断区域。要检查处理程序中的处理程序激活条件,必须在执行任何可能更改它的语句之前检查该诊断区域。)请参见 第13.6.7.3节“ GET DIAGNOSTICS语句”。和 第13.6.7.7节“ MySQL诊断区域”

  • 优化器。  添加了这些优化器增强功能:

  • 触发器。  此前,一个表可以有触发事件(的每个组合最多一个触发INSERT, UPDATE, DELETE)和动作时间(BEFOREAFTER)。此限制已取消,并且允许多个触发器。有关更多信息,请参见 第23.3节“使用触发器”

  • 正在记录。  这些日志记录增强功能已添加:

    • 以前,在Unix和类似Unix的系统上,MySQL syslog通过将mysqld_safe捕获服务器错误输出并将其传递给来实现 对服务器错误日志的支持 syslog该服务器现在包括本机syslog 支持,该支持已扩展为包括Windows。有关将服务器错误输出发送到的更多信息 syslog,请参见 第5.4.2节“错误日志”

    • MySQL的客户现在有一个 --syslog导致要发送到系统交互报表选项 syslog设施。对于与默认“ ignore ”模式列表("*IDENTIFIED*:*PASSWORD*")匹配的语句以及与使用该--histignore选项指定的任何模式匹配的语句,将禁止记录日志 请参见第4.5.1.3节“ mysql客户端日志记录”

    • 生成的列。  MySQL现在支持CREATE TABLEand ALTER TABLE语句中生成的列的规范生成的列的值是根据在列创建时指定的表达式计算的。生成的列可以是虚拟的( 读取行时“ 即时 ”计算)或存储(插入或更新行时计算)。有关更多信息,请参见 第13.1.18.7节“创建表和生成的列”

    • mysql客户端。  以前,如果存在,则mysql中的Control + C中断当前语句;否则,则退出mysql。现在, 如果有一条语句,Control + C会中断当前语句,否则,它将取消任何部分输入行,但不会退出。

    • 用mysqlbinlog重写数据库名称。  现在,支持使用MySQL 5.7.1中添加选项,当从使用基于行的格式编写的二进制日志中读取 数据时,通过mysqlbinlog重命名数据库--rewrite-db

      此选项使用格式 您可以通过多次指定选项来实现多个重写规则。 --rewrite-db='dboldname->dbnewname'

    • 带分区表的HANDLER。  该HANDLER语句现在可以与用户分区表一起使用。此类表可以使用任何可用的分区类型(请参见 第22.2节“分区类型”)。

    • 对分区表的索引条件下推支持。  使用InnoDB或 MyISAM存储引擎对分区表进行查询时, 可以使用MySQL 5.6中引入的索引条件下推优化。有关更多信息请参见 第8.2.1.5节“索引条件下推优化”

    • 无验证支持ALTER TABLE ... EXCHANGE PARTITION。  从MySQL 5.7.5开始, ALTER TABLE ... EXCHANGE PARTITION语法包括一个可选{WITH|WITHOUT} VALIDATION 子句。WITHOUT VALIDATION指定, ALTER TABLE ... EXCHANGE PARTITION与分区交换填充表时不执行行由行验证,允许数据库管理员承担确保行是分区定义的范围内承担责任。WITH VALIDATION是默认行为,无需明确指定。有关更多信息,请参见 第22.3.3节“用表交换分区和子分区”

    • 主转储线程改进。  重构主转储线程以减少锁争用并提高主吞吐量。在MySQL 5.7.2之前,转储线程在读取事件时会锁定二进制日志。在MySQL 5.7.2和更高版本中,仅在读取最后一个成功写入的事件结束时的位置时才保留此锁定。这意味着多个转储线程现在都可以从二进制日志文件中同时读取,并且转储线程现在可以在客户端向二进制日志写入时读取。

    • 字符集支持。  MySQL 5.7.4包含gb18030 支持中国国家标准GB18030字符集的字符集。有关MySQL字符集支持的更多信息,请参见第10章,字符集,归类,Unicode

    • 无需停止从站即可更改复制母版。  在MySQL 5.7.4及更高版本中,删除了STOP SLAVE在发出任何CHANGE MASTER TO语句之前执行的严格要求CHANGE MASTER TO现在,其行为取决于从SQL线程和从I / O线程的状态,而不是取决于从服务器是否停止 现在,这些线程中的哪个线程已停止或正在运行,确定了CHANGE MASTER TO在给定时间点可以与语句一起使用或不能使用的选项 进行此确定的规则在此处列出:

      • 如果SQL线程停止时,可以执行 CHANGE MASTER TO使用的任意组合RELAY_LOG_FILE, RELAY_LOG_POS和 MASTER_DELAY选择,即使从I / O线程运行。当I / O线程正在运行时,此语句不能与其他选项一起使用。

      • 如果I / O线程停止时,可以执行 CHANGE MASTER TO使用任何选项,此语句(任何允许的组合) 除外 RELAY_LOG_FILE, RELAY_LOG_POS或者 MASTER_DELAY,SQL线程运行时也是如此。当I / O线程正在运行时,可能无法使用这三个选项。

      • 在发出之前,必须停止SQL线程和I / O线程CHANGE MASTER TO ... MASTER_AUTO_POSITION = 1

      您可以使用来检查从属SQL和I / O线程的当前状态SHOW SLAVE STATUS

      如果使用的是基于语句的复制和临时表,则该CHANGE MASTER TO语句之后的STOP SLAVE语句可能会在从属服务器上留下临时表。作为这套改进的一部分,当基于语句的复制正在使用且 大于0 时, 现在每次CHANGE MASTER TO 发出警告时都会发出警告。 STOP SLAVESlave_open_temp_tables

      有关更多信息,请参见 第13.4.2.1节“将主表更改为语句”和 第16.3.7节“在故障转移期间切换主表”

  • 测试套件。  MySQL测试套件现在InnoDB用作默认存储引擎。
  • 现在可以进行多源复制。  MySQL多源复制增加了从多个主服务器复制到从服务器的能力。MySQL多源复制拓扑可用于将多个服务器备份到单个服务器,合并表分片,并将数据从多个服务器合并到单个服务器。请参见 第16.1.4节“ MySQL多源复制”

    作为MySQL多源复制的一部分,已添加复制通道。复制通道使从属服务器可以打开多个要复制的连接,每个通道都是与主服务器的连接。请参见 第16.2.3节“复制通道”

  • 组复制性能架构表。  MySQL 5.7在性能模式中添加了许多新表,以提供有关复制组和通道的信息。这些表格包括: 
  • 所有这些表都是在MySQL 5.7.2中添加的,除了 replication_group_members和 replication_group_member_stats,它们是在MySQL 5.7.6中添加的。有关更多信息,请参见 第25.12.11节“性能架构复制表”

  组复制SQL。  在MySQL 5.7.6中添加了以下语句来控制组复制: