本节总结MySQL 5.7中已添加、已弃用和已删除的内容。一个配套的部分列出了MySQL服务器选项和变量,这些变量在MySQL 5.7中已经被添加、弃用或删除;看到章节1.4,“MySQL 5.7中服务器和状态变量和选项的添加、弃用或删除”.
MySQL 5.7新增了以下特性:
安全改进。增加了以下安全增强:
在MySQL 8.0中,
caching_sha2_password
是默认的身份验证插件。使MySQL 5.7客户端使用验证使用的帐户连接到8.0服务器caching_sha2_password
, MySQL 5.7客户端库和客户端程序支持caching_sha2_password
MySQL 5.7.23版本的客户端认证插件。这提高了MySQL 5.7与MySQL 8.0及更高版本服务器的兼容性。看到第6.4.1.4节“缓存SHA-2可插入认证”.的帐户行
mysql.user
系统表有一个非空的插件
列值,并禁用具有空值的帐户。有关服务器升级说明,请参见第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密钥和证书文件。有关更多信息,请参见mysql_ssl_rsa_setup -创建SSL/RSA文件.
MySQL部署安装mysqld——初始化默认情况下是安全的。实现了以下修改,作为默认的部署特性:
安装过程只创建一个
根
账户,“根”@“localhost”
,自动为该帐户生成随机密码,并标记密码过期。MySQL管理员必须以根
使用随机密码并指定新密码。(服务器将随机密码写入错误日志。)安装不会创建匿名用户帐户。
安装了没有
测验
数据库。
有关更多信息,请参见第2.10.1节“初始化数据目录”.
MySQL企业版现在提供数据屏蔽和去识别功能。数据屏蔽通过用替换值替换真实值来隐藏敏感信息。MySQL企业数据屏蔽和去识别功能支持使用几种方法屏蔽现有数据,如混淆(删除识别特征)、生成格式化随机数据和数据替换或替换。有关更多信息,请参见第6.5节,“MySQL企业数据屏蔽和去识别”.
MySQL现在将授予命名管道上的客户机的访问控制设置为Windows上成功通信所需的最小值。较新的MySQL客户端软件可以打开命名管道连接,无需任何额外配置。如果旧的客户端软件不能立即升级,则新的
named_pipe_full_access_group
system变量可用于为Windows组提供打开命名管道连接的必要权限。完全访问组中的成员应该是受限的和临时的。
SQL模式的变化。事务性存储引擎的严格SQL模式(
STRICT_TRANS_TABLES
)现在默认启用。实现的
ONLY_FULL_GROUP_BY
SQL模式已经变得更加复杂,不再拒绝以前被拒绝的确定性查询。因此,现在默认启用此模式,只禁止包含表达式的非确定性查询,表达式不能保证在组中唯一确定。的
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
现在支持一个重命名索引
子句重命名索引。更改是在没有表复制操作的情况下进行的。适用于所有存储引擎。看到第13.1.8节,“ALTER TABLE语句”.ngram和MeCab全文解析器插件。MySQL提供了一个内置的全文ngram解析器插件,支持中文、日语和韩语(CJK),以及一个可安装的日语MeCab全文解析器插件。
有关更多信息,请参见第12.10.8节“ngram全文解析器”,第12.10.9节,“MeCab全文解析器插件”.
InnoDB增强。这些
InnoDB
添加了增强:VARCHAR
列大小可以使用就地增加ALTER TABLE
,在这个例子中:ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(255);
只要a所需的长度字节数是正确的
VARCHAR
列保持不变。为VARCHAR
大小为0到255字节的列,需要一个长度字节来对值进行编码。为VARCHAR
大小为256字节或更多的列,需要两个长度字节。结果,到位ALTER TABLE
只支持增加VARCHAR
列大小从0到255字节,或从256字节到更大的大小。就地ALTER TABLE
不支持增加的大小VARCHAR
列从小于256字节到大于或等于256字节。在这种情况下,所需长度字节的数量从1变为2,这仅由表副本(算法=复制
).减少
VARCHAR
大小使用就地ALTER TABLE
不支持。减少VARCHAR
Size需要表副本(算法=复制
).有关更多信息,请参见第14.13.1节“在线DDL操作”.
DDL的性能
InnoDB
的优化改进了临时表创建表
,删除表
,截断表
,ALTER TABLE
语句。InnoDB
临时表元数据不再存储到InnoDB
系统表。取而代之的是一张新表,INNODB_TEMP_TABLE_INFO
,为用户提供活动临时表的快照。该表包含元数据,并报告在给定范围内活动的所有用户和系统创建的临时表InnoDB
实例。该表是在第一次选择
语句对它运行。InnoDB
现在支持mysql支持的空间数据类型。在此版本发布之前,InnoDB
将空间数据存储为二进制团
数据。团
保持基础数据类型,但空间数据类型现在映射到新的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
,允许您指定要读取和转储的每个缓冲池中最近使用页面的百分比。执行其他I/O活动时InnoDB
后台任务,InnoDB
方法限制每秒缓冲池加载操作的次数innodb_io_capacity
设置。InnoDB
支持多个页面清理线程,用于从缓冲池实例刷新脏页面。一个新的系统变量,innodb_page_cleaners
,用于指定页清理器线程数。的默认值。1
维护前面的配置,其中有一个页面清理器线程。该增强建立在MySQL 5.6中完成的工作基础上,它引入了一个单一的页面清理器线程,将缓冲池刷新工作从InnoDB
掌握线程。在线DDL支持扩展到以下常规和分区操作
InnoDB
表:ALTER TABLE……引擎= INNODB
(当运行在InnoDB
表)在线DDL支持减少表重建时间,并允许并发DML。看到第14.13节“InnoDB和在线DDL”.
Linux下的Fusion-io NVM文件系统提供原子写能力,这使得
InnoDB
doublewrite缓冲多余的。的InnoDB
系统表空间文件的Doublewrite缓冲区自动禁用(ibdata文件)位于支持原子写的Fusion-io设备上。InnoDB
支持移动式表空间功能分区InnoDB
表和个人InnoDB
表分区。这种增强简化了分区表的备份过程,并支持在MySQL实例之间复制分区表和单个表分区。有关更多信息,请参见第14.6.1.3节“导入InnoDB表”.的
通过innodb_buffer_pool_size
参数是动态的,允许您在不重新启动服务器的情况下调整缓冲池的大小。调整大小操作,包括将页面移动到内存中的新位置,是按块执行的。块大小可以使用newinnodb_buffer_pool_chunk_size
配置选项。可以使用新的控件监视调整大小的过程Innodb_buffer_pool_resize_status
状态变量。有关更多信息,请参见在线配置InnoDB缓冲池大小.多线程页面清理器支持(
innodb_page_cleaners
)扩展到停机和恢复阶段。InnoDB
支持空间数据类型的索引空间
索引,包括使用ALTER TABLE……算法=原地
网上运作(添加空间索引
).InnoDB
在创建或重建索引时执行批量加载。这种创建索引的方法称为”排序的索引构建”.这种增强提高了索引创建的效率,也适用于全文索引。一个新的全局配置选项,innodb_fill_factor
,定义在排序索引构建过程中填充数据的每个页面上的空间百分比,其余空间为未来的索引增长保留。有关更多信息,请参见第14.6.2.3节“排序索引构建”.新的日志记录类型(
MLOG_FILE_NAME
)用于标识自上一个检查点以来被修改的表空间。这种增强简化了崩溃恢复期间的表空间发现,并消除了在重做日志应用程序之前对文件系统的扫描。有关此增强的好处的更多信息,请参见在崩溃恢复期间发现表空间.这个增强改变了重做日志的格式,要求在升级到MySQL 5.7.5或从MySQL 5.7.5降级之前,必须彻底关闭MySQL。
可以截断驻留在undo表空间中的undo日志。方法启用此特性
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……升级分区
.InnoDB
支持创建通用表空间创建表空间
语法。创建表空间”tablespace_name“添加数据文件”file_name.ibd' [FILE_BLOCK_SIZE = n]
通用表空间可以在MySQL数据目录之外创建,能够保存多个表,并支持所有行格式的表。
将表添加到通用表空间
创建表
或tbl_name
...表空间(=)tablespace_name
ALTER TABLE
语法。tbl_name
表空间(=)tablespace_name
有关更多信息,请参见第14.6.3.3节,“通用表空间”.
动态
替换紧凑的
的隐式默认行格式InnoDB
表。一个新的配置选项,innodb_default_row_format
,指定默认的InnoDB
行格式。有关更多信息,请参见定义表的行格式.从MySQL 5.7.11开始,
InnoDB
支持每表文件表空间的静止数据加密。参数来启用加密加密
类时的选项InnoDB
表格该特性依赖于密匙环
加密密钥管理插件。有关更多信息,请参见第6.4.4节“MySQL Keyring”,第14.14节“InnoDB数据静止加密”.从MySQL 5.7.24开始,zlib库与MySQL绑定的版本从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及以上版本中,可以使用
作为速记列
->路径
JSON_EXTRACT (
.这作为列的别名工作,只要在SQL语句中可以出现列标识符,包括列
,路径
)在哪里
,命令
,集团
条款。这包括选择
,更新
,删除
,创建表
,以及其他SQL语句。左边一定是aJSON
列标识符(而不是别名)。右边是一个带引号的JSON路径表达式,它根据作为列值返回的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值的字符串。
另请参阅第12.18.6节“JSON实用函数”.
JSON实用函数
JSON_STORAGE_SIZE ()
,它在任何部分更新之前返回JSON文档的二进制表示所使用的存储空间(以字节为单位)(参见上一项)。该函数还接受JSON文档的有效字符串表示。对于这样的值,
JSON_STORAGE_SIZE ()
返回在转换为JSON文档后其二进制表示所使用的空间。对于包含JSON文档的字符串表示形式的变量,JSON_STORAGE_FREE ()
返回零。如果函数的(非空)参数不能被解析为有效的JSON文档,则两个函数都会产生错误零
如果论证是零
.有关更多信息和示例,请参见第12.18.6节“JSON实用函数”.
要符合的JSON合并函数RFC 7396.
JSON_MERGE_PATCH ()
,当对2个JSON对象使用时,将它们合并为一个JSON对象,该对象的成员为以下集合的并集:第一个对象的每个成员,但第二个对象中没有具有相同键的成员。
第二个对象的每个成员,其中没有与第一个对象具有相同键的成员,且其值不是JSON
零
文字。每个成员都有一个存在于两个对象中的键,其值在第二个对象中不是JSON
零
文字。
作为这项工作的一部分
JSON_MERGE ()
函数已重命名JSON_MERGE_PRESERVE ()
.JSON_MERGE ()
继续被识别为JSON_MERGE_PRESERVE ()
在MySQL 5.7,但现在已弃用,并将在MySQL的未来版本中删除。有关更多信息和示例,请参见第12.18.4节“修改JSON值的函数”.
看到第12.18.3节“搜索JSON值的函数”,以获取更多有关
->
而且JSON_EXTRACT ()
.有关MySQL 5.7中JSON路径支持的信息,请参见搜索和修改JSON值.另请参阅为生成的列建立索引以提供JSON列索引.系统和状态变量。系统和状态变量信息现在可以在性能模式表中获得,优先使用
INFORMATION_SCHEMA
表来获取这些变量。这也影响了操作显示变量
而且显示状态
语句。的值show_compatibility_56
系统变量影响系统和状态变量语句和表产生的输出和所需的特权。关于该变量的详细描述请参见第5.1.7节,“服务器系统变量”.请注意的默认值
show_compatibility_56
是从
.需要5.6行为的应用程序应该将此变量设置为在
直到它们被迁移到系统变量和状态变量的新行为。看到第25.20节“迁移到性能模式系统和状态变量表”系统模式。MySQL发行版现在包含
sys
模式,它是一组对象,帮助dba和开发人员解释Performance schema收集的数据。sys
模式对象可用于典型的调优和诊断用例。有关更多信息,请参见26章,MySQL系统模式.条件处理。MySQL现在支持堆叠诊断区域。当推入诊断区域堆栈时,第一个(当前)诊断区域将成为第二个(堆叠)诊断区域,并创建一个新的当前诊断区域作为其副本。在条件处理程序中,执行的语句修改新的当前诊断区域,但是
得到堆叠诊断
可用于检查堆叠诊断区域,以获取有关导致处理程序激活的条件的信息,而不依赖于处理程序本身中的当前条件。(以前,只有一个诊断区域。为了检查处理程序中的处理程序激活条件,在执行任何可能更改它的语句之前,有必要检查这个诊断区域。)看到第13.6.7.3节,“GET DIAGNOSTICS语句”,第13.6.7.7节“MySQL诊断区”.优化器。添加了以下优化器增强:
解释
可用于获取在命名连接中执行的可解释语句的执行计划:解释(选项)连接connection_id;
有关更多信息,请参见第8.8.4节“获取命名连接的执行计划信息”.
可以在单个SQL语句中向优化器提供提示,这样可以更好地控制语句执行计划
optimizer_switch
系统变量。在with使用的语句中也允许使用提示解释
,使您能够看到提示如何影响执行计划。有关更多信息,请参见第8.9.3节,“优化器提示”.prefer_ordering_index国旗。默认情况下,MySQL尝试使用有序索引
命令
或集团
具有限制
子句,只要优化器确定这将导致更快的执行。因为在某些情况下,为这样的查询选择一个不同的优化实际上会执行得更好,所以在MySQL 5.7.33中可以通过设置prefer_ordering_index
旗帜从
.该标志的默认值为
在
.有关更多信息和示例,请参见第8.9.2节“可切换优化”,第8.2.1.17节“LIMIT查询优化”.
触发器。以前,对于每个触发事件的组合,一个表最多只能有一个触发器(
插入
,更新
,删除
)和行动时间(之前
,后
).此限制已被取消,并允许多个触发器。有关更多信息,请参见第23.3节,“使用触发器”.日志记录。添加了以下日志增强功能:
以前,在Unix和类Unix系统上,MySQL支持将服务器错误日志发送到
syslog
是通过mysqld_safe捕获服务器错误输出并将其传递给syslog
.服务器现在包含本机syslog
支持,它已经扩展到包括Windows。有关将服务器错误输出发送到的详细信息syslog
,请参阅第5.4.2节“错误日志”.的mysql客户端现在有一个
——syslog
选项,该选项使交互式语句被发送到系统syslog
设施。对于匹配默认值的语句,日志记录将被抑制”忽略”模式列表(“密码*确定*:* *”
方法指定的任何模式的匹配语句——histignore
选择。看到章节4.5.1.3,“mysql客户端日志”.
生成的列。MySQL现在支持在中生成列的规范
创建表
而且ALTER TABLE
语句。从创建列时指定的表达式计算生成列的值。生成的列可以是虚拟的(计算的)”在飞行中”读取行时)或存储(插入或更新行时计算)。有关更多信息,请参见第13.1.18.7节“创建表和生成的列”.mysql客户端。在此之前,控制+ C在mysql中,如果有当前语句则中断,如果没有则退出mysql。现在控制+ C如果存在当前语句,则中断当前语句,否则取消任何部分输入行,但不退出。
使用mysqlbinlog重写数据库名称。数据库的重命名方法为mysqlbinlog从使用基于行的格式写入的二进制日志中读取时,现在支持使用
——rewrite-db
选项在MySQL 5.7.1中添加。该选项使用格式
——rewrite-db = '
.通过多次指定该选项,可以实现多个重写规则。dboldname
->dbnewname
'带有分区表的HANDLER。的
处理程序
语句现在可以与用户分区表一起使用。这样的表可以使用任何可用的分区类型(参见第22.2节“分区类型”).分区表的索引条件下推支持。类对分区表的查询
InnoDB
或MyISAM
存储引擎可以采用MySQL 5.6中引入的索引条件下推优化。看到第8.2.1.5节“索引条件下推优化”,以查询更多资料。没有验证支持ALTER TABLE…交换分区。从MySQL 5.7.5开始,
ALTER TABLE……交换分区
语法包含一个可选的{有|没有}验证
条款。当没有验证
是指定的,ALTER TABLE……交换分区
在与分区交换填充表时,不执行逐行验证,从而允许数据库管理员负责确保行在分区定义的边界内。与验证
是默认行为,不需要显式指定。有关更多信息,请参见第22.3.3节“与表交换分区和子分区”.源转储线程改进。对源转储线程进行了重构,以减少锁争用并提高源吞吐量。在MySQL 5.7.2之前,转储线程在读取事件时锁定二进制日志;在MySQL 5.7.2及更高版本中,这个锁只在读取最后一个成功写入事件末尾的位置时被持有。这意味着多个转储线程现在能够并发地从二进制日志文件中读取,并且转储线程现在能够在客户机写入二进制日志时进行读取。
字符集的支持。MySQL 5.7.4包含一个
gb18030
支持中国标准GB18030字符集的字符集。有关MySQL字符集支持的更多信息,请参见第十章,字符集,排序规则,Unicode.修改复制源不停止SLAVE。在MySQL 5.7.4及以后版本中,严格要求执行
停止奴隶
在发出任何改变主
语句删除。的行为而不是取决于副本是否停止改变主
现在取决于复制SQL线程和复制I/O线程的状态;这些线程中的哪一个现在停止或运行,决定了可以或不能使用的选项改变主
在一个给定的时间点。作出这一决定的规则如下:如果SQL线程停止,则可以执行
改变主
的任意组合RELAY_LOG_FILE
,RELAY_LOG_POS
,MASTER_DELAY
选项,即使副本I/O线程正在运行。当I/O线程运行时,此语句不能使用其他选项。如果I/O线程停止,则可以执行
改变主
使用此语句的任何选项(以任何允许的组合)除了RELAY_LOG_FILE
,RELAY_LOG_POS
,或MASTER_DELAY
,即使SQL线程正在运行。当I/O线程正在运行时,这三个选项可能不会被使用。SQL线程和I/O线程在发出之前都必须停止
把master改为…MASTER_AUTO_POSITION = 1
.
您可以使用以下命令检查副本SQL和I/O线程的当前状态
显示奴隶状态
.如果正在使用基于语句的复制和临时表,则可以使用
改变主
声明后停止奴隶
语句在副本上保留临时表。作为这一系列改进的一部分,现在无论何时都会发出警告改变主
发行后停止奴隶
使用基于语句的复制时Slave_open_temp_tables
保持大于0。有关更多信息,请参见第13.4.2.1节“CHANGE MASTER TO Statement”,第16.3.7节,“故障转移期间切换源”.
测试套件中。MySQL测试套件现在使用
InnoDB
默认存储引擎。多源复制现在是可能的。MySQL多源复制增加了从多个源复制到一个副本的能力。MySQL多源复制拓扑可用于将多台服务器备份到一台服务器,合并表碎片,并将多台服务器的数据合并到一台服务器。看到第16.1.5节“MySQL多源复制”.
作为MySQL多源复制的一部分,已经添加了复制通道。复制通道使副本能够打开多个连接进行复制,每个通道都是到源的连接。看到第16.2.2节“复制通道”.
组复制性能模式表。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中增加了以下语句来控制组复制:
有关更多信息,请参见第13.4.3节“控制组复制的SQL语句”.
以下特性在MySQL 5.7中已弃用,并可能在未来的系列中删除。在显示替代方案的地方,应该更新应用程序以使用它们。
对于使用MySQL 5.7中已被移除的特性的应用程序,从MySQL 5.7源复制到更高系列副本时,语句可能会失败,或者可能对源和副本产生不同的影响。为了避免这些问题,应该修改使用5.7中弃用的特性的应用程序以避免这些问题,并在可能的情况下使用替代方案。
的
ERROR_FOR_DIVISION_BY_ZERO
,NO_ZERO_DATE
,NO_ZERO_IN_DATE
SQL模式现在已弃用,但默认启用。长期计划是将它们包含在严格的SQL模式中,并在未来的MySQL版本中将其作为显式模式删除。弃用的
ERROR_FOR_DIVISION_BY_ZERO
,NO_ZERO_DATE
,NO_ZERO_IN_DATE
SQL模式仍然被识别,因此命名它们的语句不会产生错误,但预计在MySQL的未来版本中将被删除。要为不存在这些模式名的MySQL版本做准备,应该修改应用程序以不引用它们。看到MySQL 5.7中的SQL模式更改.这些SQL模式现在已弃用;希望它们在MySQL的未来版本中被删除:
DB2
,MAXDB
,该软件
,MYSQL323
,MYSQL40
,甲骨文
,POSTGRESQL
,NO_FIELD_OPTIONS
,NO_KEY_OPTIONS
,NO_TABLE_OPTIONS
.这些弃用有两个含义:对象指定已弃用的模式
sql_mode
系统变量产生警告。与
MAXDB
启用SQL模式,使用创建表
或ALTER TABLE
添加一个时间戳
列到表中会产生警告。
对帐户管理报表的更改使以下功能过时。它们现在已被弃用:
使用
格兰特
创建用户。相反,使用创建用户
.遵循这种做法可以使NO_AUTO_CREATE_USER
SQL模式无关紧要格兰特
语句,所以它也被弃用了。使用
格兰特
修改帐户属性,而不是特权分配。这包括身份验证、SSL和资源限制属性。相反,在创建帐户时使用创建用户
或者在之后用改变用户
.密码识别'
语法auth_string
'创建用户
而且格兰特
.相反,使用认同
为auth_plugin
为“auth_string
'创建用户
而且改变用户
,那里的'
值的格式与指定的插件兼容。auth_string
'的
密码()
函数已被弃用,应该在任何上下文中避免使用。因此,设置密码……=密码(“
语法也已弃用。auth_string
”)设置密码……= '
语法不被弃用;尽管如此,auth_string
'改变用户
现在是分配密码的首选语句。的
old_passwords
系统变量。的帐户身份验证插件不能再未指定mysql.user
系统表,因此从明文字符串分配密码的任何语句都可以在将字符串存储到mysql.user
表格这使得old_passwords
superflous。
查询缓存已弃用。Deprecation包括以下项目:
的
SQL_CACHE
而且SQL_NO_CACHE
选择
修饰符。这些系统变量:
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-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 =了
,——disable-innodb
,等等)已被弃用。从MySQL 5.7开始,这些选项没有效果。因为InnoDB
不能被禁用。客户端
——ssl
而且——ssl-verify-server-cert
选择是不赞成的。使用——ssl-mode =要求
而不是——ssl = 1
或——启用ssl
.使用——ssl-mode =禁用
而不是——ssl = 0
,——skip-ssl
,或——禁用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
或SSL_MODE_VERIFY_IDENTITY
代替。的
log_warnings
系统变量和——log-warnings
服务器选项已弃用。使用log_error_verbosity
系统变量。的
——temp-pool
服务器选项已弃用。的
binlog_max_flush_queue_time
system变量在MySQL 5.7中什么都不做,从MySQL 5.7.9起已弃用。的
innodb_support_xa
系统变量,使能InnoDB
支持XA事务中的两阶段提交,从MySQL 5.7.10起已弃用。InnoDB
从MySQL 5.7.10开始,XA事务中始终支持两阶段提交。的
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
系统变量已弃用,该变量现在只能用会话作用域设置。该声明集全球SQL_LOG_BIN
现在产生一个错误。的全局值仍然是可能的sql_log_bin
,但这样做会产生警告。您现在应该采取行动,从您的应用程序中删除对读取该值的任何依赖;全球范围sql_log_bin
在MySQL 8.0中删除。随着MySQL 8.0中数据字典的引入,
——ignore-db-dir
选项,ignore_db_dirs
系统变量变得多余,在那个版本中被删除了。因此,它们在MySQL 5.7中已被弃用。集团
默认情况下隐式排序(也就是说,在没有ASC
或DESC
指示符),但依赖于隐式集团
MySQL 5.7中的排序已弃用。要实现分组结果的特定排序顺序,最好使用explicit来生成给定排序顺序ASC
或DESC
指示器的集团
列或提供命令
条款。集团
排序是一个MySQL扩展,在未来的版本中可能会改变;例如,使优化器能够以它认为最有效的方式对分组进行排序,并避免排序开销。的
扩展
而且分区
关键字的解释
声明弃用。这些关键字仍然可以识别,但现在已经没有必要了,因为它们的效果总是启用的。的
加密()
,编码()
,DECODE ()
,DES_ENCRYPT ()
,DES_DECRYPT ()
不支持加密功能。为加密()
,可以考虑使用SHA2 ()
而不是单向哈希。对于其他的,考虑使用AES_ENCRYPT ()
而且AES_DECRYPT ()
代替。的——des-key-file
选项时,have_crypt
系统变量,DES_KEY_FILE
选择冲洗
声明,HAVE_CRYPT
CMake选项也已弃用。的
MBREqual ()
空间功能被弃用。使用MBREquals ()
代替。中描述的功能第12.17.4节“从WKB值创建几何值的函数”以前接受WKB字符串或几何参数。不赞成使用几何参数。关于将查询迁移到不使用几何参数的指导原则,请参阅那一节。
的
INFORMATION_SCHEMA
分析
桌子是弃用。使用性能模式代替;看到25章,MySQL性能模式.的
INFORMATION_SCHEMA
INNODB_LOCKS
而且INNODB_LOCK_WAITS
表已弃用,将在MySQL 8.0中删除,它提供替代的性能模式表。性能模式
setup_timer
表已被弃用,并在MySQL 8.0中被删除蜱虫
行performance_timers
表格的
sys
模式sys.version
的观点是不赞成;希望它在MySQL的未来版本中被删除。应调整受影响的应用程序以使用替代方案。例如,使用(版本)
函数检索MySQL服务器版本。治疗
\ N
作为…的同义词零
in SQL语句已弃用,在MySQL 8.0中已移除;使用零
代替。此更改不影响与执行的文本文件导入或导出操作
加载数据
或选择……到输出文件
,零
继续由\ N
.看到第13.2.6节“LOAD DATA语句”.过程分析()
语法被弃用。注释剥离mysql客户端和控制它的选项(
——skip-comments
,——评论
弃用。mysqld_safe支持
syslog
输出是弃用。使用本机服务器syslog
支持使用。看到第5.4.2节“错误日志”.将mysql 5.1之前包含特殊字符的数据库名称转换为5.1格式,并添加了一个
# mysql50 #
前缀是弃用。正因为如此,——fix-db-names
而且——fix-table-names
选项mysqlcheck和升级数据目录名称
条款的修改数据库
语句也已弃用。只支持从一个版本系列升级到另一个版本系列(例如,从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-insecure
选项,具体取决于您是否希望服务器为初始密码生成随机密码“根”@“localhost”
帐户。mysql_install_db现在已经被弃用了,特辑也一样
——引导
选项,mysql_install_db传递给mysqld.的mysql_plugin效用是弃用。方法包括在服务器启动时使用
——plugin-load
或——plugin-load-add
选项,或在运行时使用安装插件
声明。的resolveip效用是弃用。网路资讯查询,宿主,或挖可以代替。
的resolve_stack_dump效用是弃用。来自官方MySQL构建的堆栈跟踪总是被符号化的,所以没有必要使用resolve_stack_dump.
的
mysql_kill ()
,mysql_list_fields ()
,mysql_list_processes ()
,mysql_refresh ()
不推荐使用C API函数。对应的也是如此COM_PROCESS_KILL
,COM_FIELD_LIST
,COM_PROCESS_INFO
,COM_REFRESH
客户端/服务器协议命令。相反,使用mysql_query ()
执行一个杀了
,显示列
,显示PROCESSLIST
,或冲洗
分别声明。的
mysql_shutdown ()
C API函数已弃用。相反,使用mysql_query ()
执行一个关闭
声明。的
libmysqld
从MySQL 5.7.19起已弃用嵌入式服务器库。这些也不推荐使用:的CMake
WITH_EMBEDDED_SERVER
,WITH_EMBEDDED_SHARED_LIBRARY
,INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR
选项(无证)mysql
——server-arg
选项的mysqltest
——嵌入式服务器
,——server-arg
,——服务器文件
选项的mysqltest_embedded而且mysql_client_test_embedded测试程序
因为
libmysqld
的APIlibmysqlclient
,迁移路径远离libmysqld
很简单:启动一个独立的MySQL服务器(mysqld).
修改应用程序代码以删除特定的API调用
libmysqld
.修改应用程序代码以连接到独立的MySQL服务器。
修改要使用的构建脚本
libmysqlclient
而不是libmysqld
.例如,如果你使用mysql_config方法调用它——填词
选择而不是——libmysqld-libs
.
的取代效用是弃用。
已弃用对DTrace的支持。
的
JSON_MERGE ()
函数从MySQL 5.7.22起已弃用。使用JSON_MERGE_PRESERVE ()
代替。支持在共享中放置表分区
InnoDB
表空间从MySQL 5.7.24起已弃用。共享表空间包括InnoDB
系统表空间和通用表空间。有关在共享表空间中标识分区并将它们移动到每个表文件的表空间的信息,请参见为升级准备安装.支持
表空间= innodb_file_per_table
而且表空间= innodb_temporary
条款与创建临时表
从MySQL 5.7.24起已弃用。的
——ndb
perror选择是弃用。使用ndb_perror实用程序。
以下项目是过时的,并已在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位数
(2)
数据类型已弃用。支持(2)
现在已经删除。升级到MySQL 5.7.5或更高版本后,任何剩下的2位数(2)
列必须转换为4位数字一年
列重新变得可用。有关转换策略,请参见第11.2.5节,“两位数年份(2)的限制和向四位数年份的迁移”.例如,运行mysql_upgrade后升级。的
innodb_mirrored_log_groups
系统变量。唯一支持的值是1,所以它没有任何用途。的
storage_engine
系统变量。使用default_storage_engine
代替。的
thread_concurrency
系统变量。的
timed_mutexes
系统变量。它没有任何作用,也没有任何效果。的
忽略
条款ALTER TABLE
.插入延迟
不再受支持。服务器识别但忽略延迟
关键字,将插入作为非延迟插入处理,并生成ER_WARN_LEGACY_SYNTAX_CONVERTED
警告。(”不再支持INSERT DELAYED。语句被转换为INSERT。”)同样的,取代延迟
作为非延迟替换处理。你应该预料到延迟
关键字将在未来的版本中删除。此外,一些
延迟
相关选项或功能被删除:的
——delayed-insert
选择,mysqldump.的
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不再写评论提及
插入延迟
.
在Windows上使用数据库符号链接
.sym
文件已被删除,因为它是多余的,使用本机符号链接支持可用mklink.任何.sym
文件符号链接现在被忽略,应该用使用创建的符号链接替换mklink.看到第8.12.3.3节“在Windows上为数据库使用符号链接”.未使用的
——basedir
,——datadir
,——tmpdir
选项mysql_upgrade被移除。以前,程序选项可以完整地指定,也可以作为任何明确的前缀指定。例如,
——压缩
可给予选择权,mysqldump作为——压缩机
,但不是——广告样稿
因为后者是模糊的。不再支持选项前缀;只接受完整选项。这是因为当为程序实现新选项时,前缀可能会导致问题,而当前没有歧义的前缀将来可能会变成歧义。这一变化的一些影响:的
——key-buffer
选项现在必须指定为——key-buffer-size
.的
——skip-grant
选项现在必须指定为——skip-grant-tables
.
显示引擎innodb互斥锁
输出被移除。的视图可以生成可比的信息性能模式表。的
InnoDB
表空间监视和InnoDB
表监视器已被删除。对于表监视器,可以从InnoDB
INFORMATION_SCHEMA
表。用于启用和禁用标准的特殊命名表
InnoDB
监控和InnoDB
锁监控(innodb_monitor
而且innodb_lock_monitor
)被删除,代之以两个动态系统变量:innodb_status_output
而且innodb_status_output_locks
.有关其他信息,请参见第14.18节“InnoDB监控器”.的
innodb_use_sys_malloc
而且innodb_additional_mem_pool_size
删除了MySQL 5.6.3中已弃用的系统变量。的msql2mysql,mysql_convert_table_format,mysql_find_rows,mysql_fix_extensions,mysql_setpermission,mysql_waitpid,mysql_zap,mysqlaccess,mysqlbug实用工具。
的mysqlhotcopy实用程序。备选方案包括,mysqldump和MySQL企业备份。
的binary-configure.sh脚本。
的
INNODB_PAGE_ATOMIC_REF_COUNT
CMake选择删除。的
innodb_create_intrinsic
选择删除。的
innodb_optimize_point_storage
选项和相关的内部数据类型(DATA_POINT
而且DATA_VAR_POINT
)被移除。的
innodb_log_checksum_algorithm
选择删除。