1.4 MySQL 5.7 的新增功能

本节总结了 MySQL 5.7 新增,弃用和删除的内容。随附的部分列出了在 MySQL 5.7 中已添加,不建议使用或删除的 MySQL 服务器选项和变量。参见第 1.5 节“在 MySQL 5.7 中添加,不建议使用或删除的服务器和状态变量及选项”

MySQL 5.7 中添加的功能

以下功能已添加到 MySQL 5.7:

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

另外,MySQL 发行版包含mysql_ssl_rsa_setupUtil,可以手动调用该 Util 来创建 SSL 和 RSA 密钥以及证书文件。有关更多信息,请参见第 4.4.5 节“ mysql_ssl_rsa_setup-创建 SSL/RSA 文件”

有关更多信息,请参见第 2.10.1 节“初始化数据目录”

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

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

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

有关更多信息,请参见第 12.9.8 节“ ngram 全文分析器”第 12.9.9 节“ MeCab 全文分析器插件”

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

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

不支持使用就地ALTER TABLE减小VARCHAR的大小。减小VARCHAR大小需要 table 副本(ALGORITHM=COPY)。

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

Online DDL支持减少了 table 重建时间,并允许并发 DML。参见第 14.13 节“ InnoDB 和在线 DDL”

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

从 MySQL 5.7.9 开始,mysql_upgrade查找并尝试升级使用ha_partition处理程序创建的分区InnoDBtable。同样在 MySQL 5.7.9 和更高版本中,您可以使用ALTER TABLE ...升级分区mysqlClient 端中按名称升级此类 table。

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

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

使用创建 tabletbl_name ... TABLESPACE [=] tablespace_nameALTER TABLE tbl_name TABLESPACE [=] tablespace_name语法将 table 添加到常规 table 空间。

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

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

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

在 MySQL 5.7.9 和更高版本中,您可以使用column->path作为JSON_EXTRACT(column, path)的简写。只要在 SQL 语句中可以出现列标识符的地方(包括WHEREORDER BYGROUP BY子句),它就可以用作列的别名。这包括SELECTUPDATEDELETECREATE TABLE和其他 SQL 语句。左侧必须是JSON列标识符(而不是别名)。右侧是带引号的 JSON 路径 table 达式,该 table 达式将针对作为列值返回的 JSON 文档进行评估。

MySQL 5.7.22 添加了以下 JSON 函数:

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

另请参见第 12.17.6 节“ JSONUtil 函数”

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

有关更多信息和示例,请参见第 12.17.6 节“ JSONUtil 函数”

在这项工作中,JSON_MERGE()函数已重命名为JSON_MERGE_PRESERVE()JSON_MERGE()在 MySQL 5.7 中 continue 被视为JSON_MERGE_PRESERVE()的别名,但现在已弃用,并且在将来的 MySQL 版本中会被删除。

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

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

Note

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

EXPLAIN [options] FOR CONNECTION connection_id;

有关更多信息,请参见第 8.8.4 节“获取命名连接的执行计划信息”

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

您可以使用显示从站状态检查从属 SQL 和 I/O 线程的当前状态。

如果使用的是基于语句的复制和临时 table,则STOP SLAVE语句后的CHANGE MASTER TO语句可能会在从属服务器上留下临时 table。作为这组改进的一部分,当使用基于语句的复制并且Slave_open_temp_tables保持大于 0 时,在STOP SLAVE之后发出CHANGE MASTER TO之后,现在会发出警告。

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

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

所有这些 table 都是在 MySQL 5.7.2 中添加的,除了replication_group_membersreplication_group_member_stats是在 MySQL 5.7.6 中添加的。有关更多信息,请参见第 25.12.11 节,“性能架构复制 table”

有关更多信息,请参见第 13.4.3 节“用于控制组复制的 SQL 语句”

MySQL 5.7 中不推荐使用的功能

以下功能在 MySQL 5.7 中已弃用,并且可能在以后的系列中被删除或将被删除。在显示替代方案的地方,应更新应用程序以使用它们。

对于使用在更高版本的 MySQL 系列中已删除的 MySQL 5.7 中不推荐使用的功能的应用程序,将语句从 MySQL 5.7 主服务器复制到更高系列的从服务器时,语句可能会失败,或者可能会对主服务器和从服务器产生不同的影响。为避免此类问题,应修改使用 5.7 中不推荐使用的功能的应用程序,以避免出现这种情况,并在可能的情况下使用替代方法。

仍然可以识别已弃用的ERROR_FOR_DIVISION_BY_ZERONO_ZERO_DATENO_ZERO_IN_DATE SQL 模式,以便命名它们的语句不会产生错误,但是会在 MySQL 的 Future 版本中将其删除。为了为不存在这些模式名称的 MySQL 版本做提前准备,应修改应用程序以使其不引用它们。参见MySQL 5.7 中的 SQL 模式更改

对于 C API,mysql_options()MYSQL_OPT_SSL_ENFORCEMYSQL_OPT_SSL_VERIFY_SERVER_CERT选项与 Client 端--ssl--ssl-verify-server-cert选项相对应,并且已弃用。请将MYSQL_OPT_SSL_MODE与选项值SSL_MODE_REQUIREDSSL_MODE_VERIFY_IDENTITY一起使用。

不建议为会话character_set_databasecollation_database系统变量分配值,并且分配会产生警告。会话变量在 MySQL 的 Future 版本中将变为只读,并且赋值将产生错误。仍然可以访问会话变量,以确定默认数据库的数据库字符集和排序规则。

此更改不会影响使用LOAD DATA选择...进入外档执行的文本文件导入或导出操作,对于NULLcontinue 由\Ntable 示。参见第 13.2.6 节“ LOAD DATA 语句”

仅支持从一个发行系列升级到另一个发行系列(例如,从 5.0 升级到 5.1,或从 5.1 升级到 5.5),因此,将旧的 5.0 数据库名称转换为当前版本的 MySQL 几乎不需要。解决方法是,先将 MySQL 5.0 安装升级到 MySQL 5.1,然后再升级到最新版本。

mysql_install_db现在已弃用,mysql_install_db传递给mysqld的特殊--bootstrap选项也已弃用。

由于libmysqld使用的 API 与libmysqlclient类似,因此从libmysqld迁移的路径很简单:

MySQL 5.7 中删除的功能

以下各项已过时,并且已在 MySQL 5.7 中删除。在显示替代方案的地方,应更新应用程序以使用它们。

对于使用 MySQL 5.7 中已删除功能的 MySQL 5.6 应用程序,将语句从 MySQL 5.6 主服务器复制到 MySQL 5.7 从服务器时,语句可能会失败,或对主服务器和从服务器产生不同影响。为避免此类问题,应修改使用 MySQL 5.7 中已删除功能的应用程序,以避免它们出现,并在可能的情况下使用替代方法。

此外,还删除了一些与DELAYED相关的选项或功能:

首页