扩展 MySQL 8.0  / 第一章简介  /  1.3 MySQL 5.7 中的新功能

1.3 MySQL 5.7 中的新功能

本节总结了 MySQL 5.7 中添加、弃用和删除的内容。配套部分列出了在 MySQL 5.7 中添加、弃用或删除的 MySQL 服务器选项和变量;请参阅 第 1.4 节,“MySQL 5.7 中添加、弃用或删除的服务器和状态变量和选项”

MySQL 5.7 新增功能

MySQL 5.7 增加了以下特性:

  • 安全改进。  添加了这些安全增强功能:

    • 在 MySQL 8.0 中,caching_sha2_password 是默认的身份验证插件。为了使 MySQL 5.7 客户端能够使用使用 进行身份验证 caching_sha2_password的帐户连接到 8.0 服务器,MySQL 5.7 客户端库和客户端程序 caching_sha2_password从 MySQL 5.7.23 开始支持客户端身份验证插件。这提高了 MySQL 5.7 与 MySQL 8.0 及更高版本服务器的兼容性。请参阅 第 6.4.1.4 节,“缓存 SHA-2 可插入身份验证”

    • 服务器现在要求系统表中的帐户行 mysql.user具有非空plugin列值并禁用具有空值的帐户。有关服务器升级说明,请参阅 第 2.11.3 节,“MySQL 5.7 中的更改”。建议 DBA 也将使用 mysql_old_password身份验证插件的帐户转换为使用mysql_native_password ,因为对的支持 mysql_old_password已被删除。有关帐户升级说明,请参阅 第 6.4.1.3 节,“从 4.1 版之前的密码哈希和 mysql_old_password 插件迁移”

    • MySQL 现在使数据库管理员能够建立密码自动过期策略:任何使用密码已超过其允许生命周期的帐户连接到服务器的用户都必须更改密码。有关详细信息,请参阅 第 6.2.11 节,“密码管理”

    • 管理员可以锁定和解锁帐户以更好地控制谁可以登录。有关详细信息,请参阅 第 6.2.15 节“帐户锁定”

    • 为了更容易支持安全连接,使用 OpenSSL 编译的 MySQL 服务器可以在启动时自动生成丢失的 SSL 和 RSA 证书和密钥文件。请参阅 第 6.3.3.1 节,“使用 MySQL 创建 SSL 和 RSA 证书和密钥”

      所有服务器,如果没有为 SSL 明确配置,如果它们在数据目录中找到必需的 SSL 文件,则会尝试在启动时自动启用 SSL。请参阅 第 6.3.1 节,“配置 MySQL 以使用加密连接”

      此外,MySQL 发行版包括一个 mysql_ssl_rsa_setup实用程序,可以手动调用它来创建 SSL 和 RSA 密钥和证书文件。有关详细信息,请参阅 第 4.4.5 节,“mysql_ssl_rsa_setup — 创建 SSL/RSA 文件”

    • 使用mysqld --initialize 安装的 MySQL 部署默认是安全的。以下更改已作为默认部署特性实施:

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

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

      • 安装不创建test 数据库。

      有关详细信息,请参阅 第 2.10.1 节“初始化数据目录”

    • MySQL 企业版现在提供数据屏蔽和去标识化功能。数据屏蔽通过用替代值替换实际值来隐藏敏感信息。MySQL Enterprise Data Masking 和 De-Identification 功能可以使用多种方法来屏蔽现有数据,例如混淆(删除识别特征)、格式化随机数据的生成以及数据替换或替换。有关详细信息,请参阅第 6.5 节,“MySQL 企业数据屏蔽和去标识化”

    • MySQL 现在将命名管道上授予客户端的访问控制设置为在 Windows 上成功通信所需的最低限度。较新的 MySQL 客户端软件无需任何额外配置即可打开命名管道连接。如果不能立即升级旧的客户端软件,可以 named_pipe_full_access_group 使用新的系统变量为 Windows 组提供打开命名管道连接所需的权限。完全访问组的成员资格应该是受限制的和临时的。

  • SQL 模式更改。  事务存储引擎 ( STRICT_TRANS_TABLES) 的严格 SQL 模式现在默认启用。

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

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

    对默认 SQL 模式的更改会导致 sql_mode启用以下模式的默认系统变量值: ONLY_FULL_GROUP_BYSTRICT_TRANS_TABLESNO_ZERO_IN_DATENO_ZERO_DATEERROR_FOR_DIVISION_BY_ZERONO_AUTO_CREATE_USERNO_ENGINE_SUBSTITUTION

  • 联机更改表。  ALTER TABLE现在支持 RENAME INDEX重命名索引的子句。更改是在没有表复制操作的情况下进行的。它适用于所有存储引擎。请参阅 第 13.1.8 节,“ALTER TABLE 语句”

  • ngram 和 MeCab 全文解析器插件。  MySQL 提供了一个内置的支持中文、日语和韩语 (CJK) 的全文 ngram 解析器插件,以及一个可安装的用于日语的 MeCab 全文解析器插件。

    有关详细信息,请参阅 第 12.10.8 节,“ngram 全文解析器”第 12.10.9 节,“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不支持增加a的大小VARCHAR从小于 256 字节到等于或大于 256 字节的列。在这种情况下,所需的长度字节数从 1 变为 2,这仅由表副本(ALGORITHM=COPY)支持。

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

      有关详细信息,请参阅 第 14.13.1 节,“在线 DDL 操作”

    • 通过优化、 、 和 语句 ,InnoDB提高了临时表的 DDL 性能。CREATE TABLEDROP TABLETRUNCATE TABLEALTER 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对全文解析器插件的支持。有关全文解析器插件的信息,请参阅 全文解析器插件编写全文解析器插件

    • InnoDB支持多个页面清理器线程,用于从缓冲池实例中清除脏页。一个新的系统变量, innodb_page_cleaners用于指定页面清理器线程的数量。默认值1保持以前的配置,其中有一个页面清理器线程。此增强功能建立在 MySQL 5.6 中完成的工作之上,它引入了一个页面清理器线程来从 InnoDB主线程卸载缓冲池刷新工作。

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

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

    • 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支持 file-per-table 表空间的静态数据加密。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 及更高版本中,您可以使用 as 的简写形式 。这用作列标识符可以出现在 SQL 语句中的任何列的别名,包括、 和 子句。这包括 、 、 、 和其他 SQL 语句。左侧必须是 列标识符(而不是别名)。右侧是引用的 JSON 路径表达式,它根据作为列值返回的 JSON 文档进行评估。 column->pathJSON_EXTRACT(column, path)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.18.6 节,“JSON 实用函数”

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

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

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

    • 旨在符合 RFC 7396的 JSON 合并函数。 JSON_MERGE_PATCH(),当用于 2 个 JSON 对象时,将它们合并为一个 JSON 对象,该对象具有以下集合的并集作为成员:

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

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

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

      作为这项工作的一部分,该 JSON_MERGE()功能已重命名 JSON_MERGE_PRESERVE()JSON_MERGE()继续被识别为 JSON_MERGE_PRESERVE()MySQL 5.7 中的别名,但现在已弃用,并可能在未来版本的 MySQL 中删除。

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

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

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

    笔记

    的默认 show_compatibility_56值为 OFF。需要 5.6 行为的应用程序应将此变量设置为,ON 直到它们已迁移到系统变量和状态变量的新行为。请参阅 第 25.20 节,“迁移到性能模式系统和状态变量表”

  • 系统架构。  MySQL 发行版现在包含 sys模式,它是一组对象,可帮助 DBA 和开发人员解释性能模式收集的数据。 sys模式对象可用于典型的调优和诊断用例。有关详细信息,请参阅第 26 章,MySQL 系统模式

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

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

  • 触发器。 INSERT以前,对于触发事件 ( , UPDATE, DELETE) 和操作时间 ( BEFORE, ) 的每个组合,一张表最多只能有一个触发器AFTER。此限制已取消,允许多个触发器。有关详细信息,请参阅 第 23.3 节,“使用触发器”

  • 记录。  添加了这些日志记录增强功能:

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

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

  • 生成的列。  MySQL 现在支持在CREATE TABLEALTER 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使用or 存储引擎 对分区表的查询 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

  • 在没有 STOP SLAVE 的情况下更改复制源。 STOP SLAVE在 MySQL 5.7.4 及更高版本中,删除了在发出任何CHANGE MASTER TO语句之前 执行的严格要求。now的行为不取决于副本是否停止,而是取决于 CHANGE MASTER TO副本 SQL 线程和副本 I/O 线程的状态;现在停止或运行这些线程中的哪一个决定了在给定时间点可以或不能与 CHANGE MASTER TO语句一起使用的选项。此处列出了做出此决定的规则:

    • 如果 SQL 线程停止,您可以使用 、 和 选项的任意组合执行 , 即使 CHANGE MASTER TO副本I/O 线程正在运行。当 I/O 线程运行时,此语句不能使用其他选项。 RELAY_LOG_FILERELAY_LOG_POSMASTER_DELAY

    • 如果 I/O 线程停止,您可以 CHANGE MASTER TO使用此语句的任何选项(在任何允许的组合中) 执行,除了 RELAY_LOG_FILERELAY_LOG_POSMASTER_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 节,“CHANGE MASTER TO 语句”第 16.3.7 节,“在故障转移期间切换源”

  • 测试套件。  MySQL 测试套件现在InnoDB用作默认存储引擎。

  • 现在可以进行多源复制。  MySQL 多源复制增加了从多个源复制到副本的能力。MySQL Multi-Source Replication 拓扑可用于将多台服务器备份到单台服务器、合并表分片以及将多台服务器的数据整合到单台服务器。请参阅 第 16.1.5 节,“MySQL 多源复制”

    作为 MySQL 多源复制的一部分,添加了复制通道。复制通道使副本能够打开多个连接以从中进行复制,每个通道都是到源的连接。请参阅 第 16.2.2 节,“复制通道”

  • 组复制性能模式表。  MySQL 5.7 向 Performance Schema 添加了许多新表,以提供有关复制组和通道的信息。其中包括下表:

    所有这些表都是在 MySQL 5.7.2 中添加的,除了 replication_group_membersreplication_group_member_stats是在 MySQL 5.7.6 中添加的。有关详细信息,请参阅 第 25.12.11 节,“性能模式复制表”

  • 组复制 SQL。  在 MySQL 5.7.6 中添加了以下语句用于控制 Group Replication:

    有关详细信息,请参阅 第 13.4.3 节,“用于控制组复制的 SQL 语句”

MySQL 5.7 中弃用的功能

以下功能在 MySQL 5.7 中已弃用,可能会在未来的系列中删除。在显示备选方案的地方,应更新应用程序以使用它们。

对于使用 MySQL 5.7 中弃用的功能的应用程序,这些功能已在更高的 MySQL 系列中删除,当从 MySQL 5.7 源复制到更高系列的副本时,语句可能会失败,或者可能对源和副本产生不同的影响。为避免此类问题,应修改使用 5.7 中弃用功能的应用程序以避免出现此类问题,并尽可能使用替代方案。

MySQL 5.7 中删除的功能

以下项目已过时,已在 MySQL 5.7 中删除。在显示备选方案的地方,应更新应用程序以使用它们。

对于使用 MySQL 5.7 中删除的功能的 MySQL 5.6 应用程序,从 MySQL 5.6 源复制到 MySQL 5.7 副本时,语句可能会失败,或者可能对源和副本产生不同的影响。为避免此类问题,应修改使用 MySQL 5.7 中删除的功能的应用程序以避免它们并尽可能使用替代方案。

  • 删除了对使用较旧的 4.1 之前密码哈希格式的密码的支持,这涉及以下更改。必须修改使用不再受支持的任何功能的应用程序。

    • 身份验证插件已mysql_old_password删除。使用此插件的帐户在启动时被禁用,服务器 会在错误日志中写入一条未知插件”消息。有关升级使用此插件的帐户的说明,请参阅第 6.4.1.3 节,“从 4.1 版之前的密码哈希和 mysql_old_password 插件迁移”

    • 服务器和客户端程序的--secure-auth选项是默认选项,但现在是空操作。它已被弃用;希望在未来的 MySQL 版本中将其删除。

    • --skip-secure-auth不再支持服务器和客户端程序 的选项,使用它会产生错误。

    • 系统secure_auth变量只允许值为 1;不再允许值为 0。

    • 对于old_passwords 系统变量,不再允许值为 1(生成 4.1 之前的哈希值)。

    • OLD_PASSWORD()功能已删除。

  • 在 MySQL 5.6.6 中,不推荐使用 2 位 YEAR(2)数据类型。对 的支持 YEAR(2)现已删除。升级到 MySQL 5.7.5 或更高版本后,任何剩余的 2 位列 YEAR(2)必须转换为 4 位列YEAR 才能再次使用。有关转换策略,请参阅第 11.2.5 节,“2 位 YEAR(2) 限制和迁移到 4 位 YEAR”。例如,升级后运行 mysql_upgrade

  • 系统innodb_mirrored_log_groups变量。唯一受支持的值为 1,因此它没有任何用途。

  • 系统storage_engine变量。改用 default_storage_engine

  • 系统thread_concurrency变量。

  • 系统timed_mutexes变量。它什么都不做,也没有效果。

  • IGNORE条款 ALTER TABLE

  • INSERT DELAYED不再受支持。服务器识别但忽略DELAYED 关键字,将插入处理为非延迟插入,并生成 ER_WARN_LEGACY_SYNTAX_CONVERTED警告。(不再支持 INSERT DELAYED。该语句已转换为 INSERT。)类似地, REPLACE DELAYED作为非延迟替换处理。您应该期望DELAYED在未来的版本中删除该关键字。

    此外,DELAYED删除了几个 - 相关的选项或功能:

    • mysqldump--delayed-insert选项 。

    • Performance Schema 表的COUNT_WRITE_DELAYED, SUM_TIMER_WRITE_DELAYED, MIN_TIMER_WRITE_DELAYED, AVG_TIMER_WRITE_DELAYEDMAX_TIMER_WRITE_DELAYEDtable_lock_waits_summary_by_table

    • mysqlbinlog不再写入提及INSERT DELAYED.

  • Windows 上使用 .sym文件的数据库符号链接已被删除,因为它与使用 mklink提供的本机符号链接支持是多余的。任何.sym 文件符号链接现在都将被忽略,并应替换为使用mklink创建的符号链接。请参阅 第 8.12.3.3 节,“在 Windows 上使用数据库的符号链接”

  • 删除了mysql_upgrade 未使用--basedir的 、 --datadir--tmpdir 选项。

  • 以前,程序选项可以完整指定或指定为任何明确的前缀。例如, --compress可以将选项赋予mysqldump as --compr,但不能赋予 as ,--comp 因为后者不明确。不再支持选项前缀;只接受完整选项。这是因为当为程序实现新选项时,前缀可能会导致问题,并且当前明确的前缀将来可能会变得不明确。此更改的一些含义:

    • --key-buffer选项现在必须指定为--key-buffer-size.

    • --skip-grant选项现在必须指定为--skip-grant-tables.

  • SHOW ENGINE INNODB MUTEX输出被删除。可以通过在性能模式 表 上创建视图来生成可比较的信息 。

  • 删除了表InnoDB空间监视器和 InnoDB表监视器。对于表监视器,可以从 InnoDB INFORMATION_SCHEMA表中获取等效信息。

  • 用于启用和禁用标准InnoDBMonitor 和 InnoDBLock Monitor (innodb_monitorinnodb_lock_monitor) 的特殊命名表被删除并替换为两个动态系统变量: innodb_status_outputand innodb_status_output_locks。有关其他信息,请参阅 第 14.18 节,“InnoDB 监视器”

  • 删除了 MySQL 5.6.3 中弃用 的innodb_use_sys_malloc 和 系统变量。innodb_additional_mem_pool_size

  • msql2mysql 、 mysql_convert_table_formatmysql_find_rowsmysql_fix_extensionsmysql_setpermissionmysql_waitpidmysql_zapmysqlaccessmysqlbug实用程序 。

  • mysqlhotcopy实用程序 。备选方案包括mysqldump和 MySQL Enterprise Backup。

  • binary-configure.sh脚本

  • 删除 了 CMake选项。INNODB_PAGE_ATOMIC_REF_COUNT

  • innodb_create_intrinsic选项已删除。

  • 选项和相关的innodb_optimize_point_storage内部数据类型(DATA_POINTDATA_VAR_POINT)被删除。

  • innodb_log_checksum_algorithm选项已删除。

  • MySQL 5.7.39的myisam_repair_threads 系统变量。