本节总结了 MySQL 5.7 中添加、弃用和删除的内容。配套部分列出了在 MySQL 5.7 中添加、弃用或删除的 MySQL 服务器选项和变量;请参阅 第 1.4 节,“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_DATE
NO_ZERO_IN_DATE
对默认 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
现在支持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 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
支持多个页面清理器线程,用于从缓冲池实例中清除脏页。一个新的系统变量,innodb_page_cleaners
用于指定页面清理器线程的数量。默认值1
保持以前的配置,其中有一个页面清理器线程。此增强功能建立在 MySQL 5.6 中完成的工作之上,它引入了一个页面清理器线程来从InnoDB
主线程卸载缓冲池刷新工作。在线 DDL 支持扩展到对常规表和分区
InnoDB
表的以下操作:ALTER TABLE ... ENGINE=INNODB
(在InnoDB
桌子上运行时)在线 DDL 支持减少了表重建时间并允许并发 DML。请参阅 第 14.13 节,“InnoDB 和在线 DDL”。
Linux 上的 Fusion-io 非易失性内存 (NVM) 文件系统提供原子 写入功能,这使得
InnoDB
双写缓冲区变得冗余。对于位于支持原子写入的 Fusion-io 设备上 的系统表空间文件( ibdata 文件InnoDB
), 双写缓冲区会自动禁用。InnoDB
支持 分区表和单个 表分区的可传输表空间功能 。此增强功能简化了分区表的备份过程,并支持在 MySQL 实例之间复制分区表和单个表分区。有关详细信息,请参阅 第 14.6.1.3 节,“导入 InnoDB 表”。InnoDB
InnoDB
该
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_name
ALTER TABLE
tbl_name
TABLESPACE [=]tablespace_name
有关详细信息,请参阅 第 14.6.3.3 节,“通用表空间”。
DYNAMIC
替换COMPACT
为InnoDB
表的隐式默认行格式。一个新的配置选项,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
值的函数。这些功能包括此处列出的功能:创建
JSON
值的函数:JSON_ARRAY()
、JSON_MERGE()
和JSON_OBJECT()
。请参阅 第 12.18.2 节,“创建 JSON 值的函数”。搜索
JSON
值的函数:JSON_CONTAINS()
、JSON_CONTAINS_PATH()
、JSON_EXTRACT()
、JSON_KEYS()
和JSON_SEARCH()
。请参阅 第 12.18.3 节,“搜索 JSON 值的函数”。修改
JSON
值的函数:JSON_APPEND()
、JSON_ARRAY_APPEND()
、JSON_ARRAY_INSERT()
、JSON_INSERT()
、JSON_QUOTE()
、JSON_REMOVE()
、JSON_REPLACE()
、JSON_SET()
和JSON_UNQUOTE()
。请参阅 第 12.18.4 节,“修改 JSON 值的函数”。提供有关
JSON
值的信息的函数:JSON_DEPTH()
、JSON_LENGTH()
、JSON_TYPE()
和JSON_VALID()
。请参阅 第 12.18.5 节,“返回 JSON 值属性的函数”。
在 MySQL 5.7.9 及更高版本中,您可以使用 as 的简写形式 。这用作列标识符可以出现在 SQL 语句中的任何列的别名,包括、 和 子句。这包括 、 、 、 和其他 SQL 语句。左侧必须是 列标识符(而不是别名)。右侧是引用的 JSON 路径表达式,它根据作为列值返回的 JSON 文档进行评估。
column
->path
JSON_EXTRACT(
column
,path
)WHERE
ORDER BY
GROUP BY
SELECT
UPDATE
DELETE
CREATE TABLE
JSON
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 值的字符串。
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
文字。每个成员都有一个存在于两个对象中的键,并且其在第二个对象中的值不是 JSON
null
文字。
作为这项工作的一部分,该
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 VARIABLES
andSHOW 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 诊断区域”。优化器。 添加了这些优化器增强功能:
EXPLAIN
可用于获取在命名连接中执行的可解释语句的执行计划:EXPLAIN [options] FOR CONNECTION connection_id;
有关详细信息,请参阅 第 8.8.4 节,“获取命名连接的执行计划信息”。
可以在单个 SQL 语句中向优化器提供提示,这样可以比使用
optimizer_switch
系统变量更好地控制语句执行计划。与 一起使用的语句中也允许使用提示EXPLAIN
,使您能够了解提示如何影响执行计划。有关详细信息,请参阅第 8.9.3 节,“优化器提示”。prefer_ordering_index 标志。 默认情况下, 只要优化器确定这会导致更快的执行,MySQL 就会尝试对任何具有子句的查询
ORDER BY
使用有序索引。因为在某些情况下,为此类查询选择不同的优化可能实际上执行得更好,从 MySQL 5.7.33 开始,可以通过将 标志设置为 来禁用此优化。GROUP BY
LIMIT
prefer_ordering_index
off
此标志的默认值为
on
。有关更多信息和示例,请参阅 第 8.9.2 节,“可切换优化”和 第 8.2.1.17 节,“LIMIT 查询优化”。
触发器。
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 TABLE
和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
使用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_FILE
RELAY_LOG_POS
MASTER_DELAY
如果 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 SLAVE
Slave_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_members
和replication_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 系列中删除,当从 MySQL 5.7 源复制到更高系列的副本时,语句可能会失败,或者可能对源和副本产生不同的影响。为避免此类问题,应修改使用 5.7 中弃用功能的应用程序以避免出现此类问题,并尽可能使用替代方案。
、 和 SQL 模式现已弃用,但默认情况下启用
ERROR_FOR_DIVISION_BY_ZERO
。 长期计划是将它们包含在严格的 SQL 模式中,并在未来的 MySQL 版本中将它们作为显式模式删除。NO_ZERO_DATE
NO_ZERO_IN_DATE
已弃用
ERROR_FOR_DIVISION_BY_ZERO
的NO_ZERO_DATE
、 和NO_ZERO_IN_DATE
SQL 模式仍然可以识别,因此命名它们的语句不会产生错误,但预计会在未来版本的 MySQL 中删除。要为不存在这些模式名称的 MySQL 版本做提前准备,应修改应用程序以不引用它们。请参阅 MySQL 5.7 中的 SQL 模式更改。这些 SQL 模式现已弃用;希望它们在 MySQL 的 未来 版本中 被 删除 :
DB2
,,,,,,,,,,,, . 这些弃用有两个含义:MAXDB
MSSQL
MYSQL323
MYSQL40
ORACLE
POSTGRESQL
NO_FIELD_OPTIONS
NO_KEY_OPTIONS
NO_TABLE_OPTIONS
将不推荐使用的模式分配给
sql_mode
系统变量会产生警告。MAXDB
启用 SQL 模式后,使用 或CREATE TABLE
向表ALTER TABLE
中添加TIMESTAMP
列会产生警告。
帐户管理报表的更改使以下功能过时。它们现在已被弃用:
用于
GRANT
创建用户。相反,使用CREATE USER
. 遵循这种做法使得 SQL 模式对于语句来说变得NO_AUTO_CREATE_USER
无关紧要 ,因此它也被弃用了。GRANT
用于
GRANT
修改权限分配以外的帐户属性。这包括身份验证、SSL 和资源限制属性。相反,在创建帐户时使用 建立此类属性CREATE USER
或之后使用 修改它们ALTER USER
。IDENTIFIED BY PASSWORD '
auth_string
'CREATE USER
和GRANT
的 语法 相反,使用 for 和 ,其中 值的格式与命名插件兼容。IDENTIFIED WITH
auth_plugin
AS 'auth_string
'CREATE USER
ALTER USER
'
auth_string
'该
PASSWORD()
函数已弃用,在任何情况下都应避免使用。因此, 语法也被弃用。 不推荐使用语法;尽管如此, 现在是分配密码的首选语句。SET PASSWORD ... = PASSWORD('
auth_string
')SET PASSWORD ... = '
auth_string
'ALTER USER
系统
old_passwords
变量。帐户身份验证插件不能再在系统表中未指定 ,因此任何从明文字符串分配密码的语句都可以在将字符串存储在表mysql.user
中之前明确确定要对字符串使用的哈希方法 。mysql.user
这就old_passwords
显得多余了。
查询缓存已弃用。弃用包括以下项目:
和
FLUSH QUERY CACHE
语句RESET QUERY CACHE
。和
SQL_CACHE
修饰符SQL_NO_CACHE
SELECT
。这些系统变量:
have_query_cache
,ndb_cache_check_time
,query_cache_limit
,query_cache_min_res_unit
,query_cache_size
,query_cache_type
,query_cache_wlock_invalidate
.这些状态变量:
Qcache_free_blocks
,Qcache_free_memory
,Qcache_hits
,Qcache_inserts
,Qcache_lowmem_prunes
,Qcache_not_cached
,Qcache_queries_in_cache
,Qcache_total_blocks
。
以前,
--transaction-isolation
和--transaction-read-only
服务器启动选项对应于tx_isolation
和tx_read_only
系统变量。为了更好地在启动选项和系统变量名称之间建立名称对应关系,transaction_isolation
并transaction_read_only
已创建为tx_isolation
和 的别名tx_read_only
。和 变量现在已弃用tx_isolation
;tx_read_only
预计它们将在 MySQL 8.0 中删除。应调整应用程序以使用transaction_isolation
和transaction_read_only
代替。该
--skip-innodb
选项及其同义词(--innodb=OFF
、--disable-innodb
等)已弃用。从 MySQL 5.7 开始,这些选项无效。因为InnoDB
无法禁用。客户端
--ssl
和--ssl-verify-server-cert
选项已弃用。使用--ssl-mode=REQUIRED
代替--ssl=1
或--enable-ssl
。使用--ssl-mode=DISABLED
代替--ssl=0
,--skip-ssl
, 或--disable-ssl
。使用--ssl-mode=VERIFY_IDENTITY
而不是--ssl-verify-server-cert
选项。(不推荐使用服务器端--ssl
选项 。)对于 C API,
MYSQL_OPT_SSL_ENFORCE
和MYSQL_OPT_SSL_VERIFY_SERVER_CERT
选项mysql_options()
对应于客户端--ssl
和--ssl-verify-server-cert
选项,已弃用。MYSQL_OPT_SSL_MODE
与选项值SSL_MODE_REQUIRED
or 一起使用SSL_MODE_VERIFY_IDENTITY
。系统
log_warnings
变量和--log-warnings
服务器选项已弃用。请改用log_error_verbosity
系统变量。服务器选项已
--temp-pool
弃用。系统
binlog_max_flush_queue_time
变量在 MySQL 5.7 中什么都不做,从 MySQL 5.7.9 开始被弃用。从MySQL 5.7.10 开始不推荐使用支持 XA 事务中的两阶段提交 的
innodb_support_xa
系统变量。 从 MySQL 5.7.10 开始,始终启用 XA 事务中对两阶段提交的支持。InnoDB
InnoDB
和 系统变量已弃用
metadata_locks_cache_size
。metadata_locks_hash_instances
这些从 MySQL 5.7.4 开始什么都不做。系统
sync_frm
变量已弃用。全局 变量
character_set_database
和collation_database
系统变量已弃用;希望它们在未来版本的 MySQL 中被删除。为会话
character_set_database
和collation_database
系统变量赋值已被弃用,赋值会产生警告。会话变量预计在 MySQL 的未来版本中变为只读,并且分配给它们会产生错误,同时仍然可以读取会话变量以确定默认数据库的数据库字符集和排序规则。系统变量的全局范围
sql_log_bin
已被弃用,现在只能在会话范围内设置此变量。该语句SET GLOBAL SQL_LOG_BIN
现在产生一个错误。仍然可以读取 的全局值sql_log_bin
,但这样做会产生警告。您应该立即采取行动,从您的应用程序中删除任何对读取此值的依赖;sql_log_bin
MySQL 8.0 中删除 了全局范围 。随着 MySQL 8.0 中数据字典的引入,
--ignore-db-dir
选项和ignore_db_dirs
系统变量变得多余,并在该版本中被删除。因此,它们在 MySQL 5.7 中被弃用。GROUP BY
默认情况下隐式排序(即,在没有ASC
或 指示符的情况下),但在 MySQL 5.7 中DESC
依赖隐式排序已被弃用。GROUP BY
要实现分组结果的特定排序顺序,最好使用 要生成给定的排序顺序,对列使用显式ASC
或DESC
指示符GROUP BY
或提供ORDER BY
子句。GROUP BY
排序是一个 MySQL 扩展,可能会在未来的版本中改变;例如,使优化器能够以它认为最有效的任何方式对分组进行排序,并避免排序开销。该语句的
EXTENDED
和PARTITIONS
关键字 已弃用。EXPLAIN
这些关键字仍然可以识别,但现在不再需要了,因为它们的效果始终处于启用状态。、
ENCRYPT()
、ENCODE()
、DECODE()
和 encryption 函数已弃用DES_ENCRYPT()
。DES_DECRYPT()
对于ENCRYPT()
,考虑使用SHA2()
instead 进行单向哈希。对于其他人,请考虑使用AES_ENCRYPT()
andAES_DECRYPT()
代替。该--des-key-file
选项、have_crypt
系统变量、语句选项和DES_KEY_FILE
CMake 选项也已弃用。FLUSH
HAVE_CRYPT
MBREqual()
空间功能已弃用 。改用MBREquals()
。第 12.17.4 节“从 WKB 值创建几何值 的函数”中描述的 函数以前接受 WKB 字符串或几何参数。不推荐使用几何参数。有关将查询从使用几何参数迁移出去的指南,请参阅该部分。
该
INFORMATION_SCHEMA
PROFILING
表已弃用。改用性能模式;请参阅 第 25 章,MySQL 性能模式。INFORMATION_SCHEMA
INNODB_LOCKS
和INNODB_LOCK_WAITS
表已弃用,将在 MySQL 8.0 中删除,它提供了替换性能模式表 。Performance Schema
setup_timers
表已弃用并在 MySQL 8.0 中删除,表中的TICK
行也是 如此performance_timers
。sys
架构 视图 已sys.version
弃用;希望它在未来版本的 MySQL 中被删除。受影响的应用程序应调整为使用替代方案。例如,使用该VERSION()
函数检索 MySQL 服务器版本。\N
将 SQL 语句中的作为同义词 处理NULL
已弃用,并在 MySQL 8.0 中删除;改用NULL
。此更改不会影响使用 或 执行的文本文件导入或导出操作
LOAD DATA
,SELECT ... INTO OUTFILE
因为它们NULL
继续由 表示\N
。请参阅 第 13.2.6 节,“加载数据语句”。PROCEDURE ANALYSE()
语法已弃用。mysql客户端的 注释剥离和控制它的选项 (
--skip-comments
,--comments
) 已弃用。不推荐使用mysqld_safe对
syslog
输出的支持。改用使用的本机服务器syslog
支持。请参阅第 5.4.2 节,“错误日志”。不推荐将包含特殊字符的 MySQL 5.1 之前的数据库名称转换为添加
#mysql50#
前缀的 5.1 格式。因此, mysqlcheck--fix-db-names
的和--fix-table-names
选项以及语句的子句 也已弃用。UPGRADE DATA DIRECTORY NAME
ALTER DATABASE
仅支持从一个版本系列升级到另一个版本系列(例如,5.0 到 5.1,或 5.1 到 5.5),因此几乎不需要将旧的 5.0 数据库名称转换为当前版本的 MySQL。解决方法是先将 MySQL 5.0 安装升级到 MySQL 5.1,然后再升级到更新的版本。
mysql_install_db功能已集成到 MySQL 服务器mysqld中。要使用此功能初始化 MySQL 安装,如果您以前 手动 调用mysql_install_db ,请使用 或 选项调用mysqld,具体取决于您是否希望服务器为初始 帐户生成随机密码。
--initialize
--initialize-insecure
'root'@'localhost'
mysql_install_db现在已弃用, mysql_install_db传递给 mysqld
--bootstrap
的特殊 选项。mysql_plugin实用程序已弃用。备选方案包括在服务器启动时使用
--plugin-load
or--plugin-load-add
选项加载插件,或在运行时使用INSTALL PLUGIN
语句加载插件。resolveip实用程序已弃用。 可以改用 nslookup、host或 dig 。
resolve_stack_dump实用程序 已弃用。来自官方 MySQL 构建的堆栈跟踪始终是符号化的,因此无需使用 resolve_stack_dump。
、
mysql_kill()
、mysql_list_fields()
和 C API 函数已弃用mysql_list_processes()
。mysql_refresh()
相应的COM_PROCESS_KILL
、COM_FIELD_LIST
、COM_PROCESS_INFO
和COM_REFRESH
客户端/服务器协议命令也是如此。相反, 分别mysql_query()
用于执行KILL
、SHOW COLUMNS
、SHOW PROCESSLIST
或FLUSH
语句。mysql_shutdown()
C API 函数已弃用 。相反,用于mysql_query()
执行SHUTDOWN
语句。从
libmysqld
MySQL 5.7.19 开始,嵌入式服务器库已弃用。这些也被弃用:mysql_config
--libmysqld-libs
、--embedded-libs
和--embedded
选项 _CMake
WITH_EMBEDDED_SERVER
、WITH_EMBEDDED_SHARED_LIBRARY
和INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR
选项 _(未记录的)mysql
--server-arg
选项mysqltest
--embedded-server
、--server-arg
和--server-file
选项 _mysqltest_embedded和mysql_client_test_embedded 测试程序
因为
libmysqld
使用了与 的 API 相当的 APIlibmysqlclient
,所以迁移路径libmysqld
很简单:启动一个独立的 MySQL 服务器 ( mysqld )。
修改应用程序代码以删除特定于
libmysqld
.修改应用程序代码以连接到独立的 MySQL 服务器。
修改构建脚本以使用
libmysqlclient
而不是libmysqld
. 例如,如果您使用 mysql_config--libs
,请使用选项而不是 调用它--libmysqld-libs
。
替换实用程序 已弃用。
不推荐使用对 DTrace 的支持。
JSON_MERGE()
从MySQL 5.7.22 开始不推荐使用 该函数。改用JSON_MERGE_PRESERVE()
。InnoDB
从 MySQL 5.7.24 开始,不推荐 在共享表空间中放置表分区 。共享表空间包括InnoDB
系统表空间和通用表空间。有关识别共享表空间中的分区并将它们移动到 file-per-table 表空间的信息,请参阅 准备安装以进行升级。从 MySQL 5.7.24 开始,不推荐使用 对
TABLESPACE = innodb_file_per_table
andTABLESPACE = innodb_temporary
子句的 支持。CREATE TEMPORARY TABLE
--ndb
perror选项 已弃用。请改用ndb_perror实用程序。从MySQL 5.7.38 开始不推荐使用
myisam_repair_threads
系统变量 ;myisam_repair_threads
期望在 MySQL 的未来版本中删除对两者的支持。从 MySQL 5.7.38 开始,除 1(默认值)以外的值
myisam_repair_threads
都会产生警告。
以下项目已过时,已在 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_DELAYED
和MAX_TIMER_WRITE_DELAYED
列table_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
表中获取等效信息。用于启用和禁用标准
InnoDB
Monitor 和InnoDB
Lock Monitor (innodb_monitor
和innodb_lock_monitor
) 的特殊命名表被删除并替换为两个动态系统变量:innodb_status_output
andinnodb_status_output_locks
。有关其他信息,请参阅 第 14.18 节,“InnoDB 监视器”。删除了 MySQL 5.6.3 中弃用 的
innodb_use_sys_malloc
和 系统变量。innodb_additional_mem_pool_size
msql2mysql 、 mysql_convert_table_format、 mysql_find_rows、 mysql_fix_extensions、 mysql_setpermission、 mysql_waitpid、 mysql_zap、 mysqlaccess和mysqlbug实用程序 。
mysqlhotcopy实用程序 。备选方案包括mysqldump和 MySQL Enterprise Backup。
binary-configure.sh脚本。
删除 了 CMake选项。
INNODB_PAGE_ATOMIC_REF_COUNT
该
innodb_create_intrinsic
选项已删除。选项和相关的
innodb_optimize_point_storage
内部数据类型(DATA_POINT
和DATA_VAR_POINT
)被删除。该
innodb_log_checksum_algorithm
选项已删除。MySQL 5.7.39的
myisam_repair_threads
系统变量。