Documentation Home
MySQL 5.7 发行说明  /  MySQL 5.7.19 的变化(2017-07-17,全面上市)

MySQL 5.7.19 的变化(2017-07-17,全面上市)

账户管理注意事项

  • 在数据目录初始化或升级期间,MySQL 现在会创建一个'mysql.session'@'localhost' 保留帐户。该帐户由插件在内部使用以访问服务器。它被锁定,因此不能用于客户端连接。(漏洞#25642343)

编译笔记

  • Solaris: 在 Solaris 上,MySQL 二进制分发版现在链接到 libatomic.so,因此它们不再依赖于libstatomic.so. (漏洞 #25909965)

弃用和移除说明

钥匙圈笔记

  • MySQL Enterprise Edition 现在包含一个 keyring_aws插件,该插件与 Amazon Web Services Key Management Service 通信,作为密钥生成的后端,并使用本地文件进行密钥存储。有关详细信息,请参阅MySQL 密钥环

包装说明

  • mysqladmin被添加到 Docker/Minimal 包中,因为 InnoDB Cluster 需要它。(缺陷号 25998285)

  • 对于 Windows,MSI 安装程序包现在包括对所需 Visual Studio 可再发行包的检查,并在缺少时生成一条消息,要求用户安装它。(缺陷号 25658832)

  • Debian/Ubuntu 软件包现在支持带有 systemd 的多个 MySQL 实例。请参阅使用 systemd 管理 MySQL 服务器。(漏洞 #24559588,漏洞 #82785)

可插拔认证

  • MySQL 企业版现在支持 MySQL 用户的 LDAP 可插入身份验证。这使 MySQL 服务器能够使用 LDAP(轻量级目录访问协议)通过访问 X.500 等目录服务来验证 MySQL 用户。有关详细信息,请参阅 LDAP 可插入身份验证

安全说明

  • MySQL Commercial Server 的链接 OpenSSL 库已更新到版本 1.0.2l。http://www.openssl.org/news/vulnerabilities.html中描述了新 OpenSSL 版本中修复的问题 。

    此更改不影响 Oracle 生成的 MySQL Community 构建的 MySQL Server,它使用 yaSSL 库。(缺陷号 26160962)

空间数据支持

测试套件说明

  • mysql-test-run.pl现在有一个 --test-progress选项可以显示剩余测试的百分比。(错误#25601131、错误#20755059、错误#76455)

  • 对mysql-test-run.pl--xml-report的 选项进行 了这些更改:

    • <failure>标签标识在重试尝试时失败的任何测试 。

    • 跳过和禁用的测试包含单独的统计信息和字段。

    • 如果没有为源外构建提供绝对路径,则在构建目录中创建 XML 报告。

    • 对于组合运行,名为的字段 variation包含在 <testcase>标记中。

    • 属于一个套件的所有测试的结果都聚集在一个<testsuite>标签中。

    • 有关失败的信息在名为 的属性中报告,并附有简要原因message,以及标记中的其他详细信息。

    (缺陷号 25349924)

  • mysql-test-run.pl现在支持 --report-unstable-tests具有以下效果的选项:

    • 在摘要 中称为不稳定测试 的单独类别中使用至少一次重试尝试报告已通过的任何测试。

    • 如果所有失败都是由于不稳定的测试造成的, mysql-test-run.pl会产生警告但会成功退出。

    • --xml-report如果还指定 了该选项,则添加一个新的 XML 标记来报告不稳定的测试 。

    (错误#24473420,错误#25984429)

  • mysqltest现在支持一个 replace_numeric_round命令,该命令采用从 0 到 16 的参数值,指示将数值四舍五入到的小数位数。这可用于帮助防止测试的结果内容不匹配错误,在这些测试中,由于精度差异而跨平台获得的结果略有不同。感谢 Daniel Black 提供的补丁。(缺陷 #23280117,缺陷 #81399)

X 插件说明

  • X 插件现在可以正确处理过期的 SSL 证书。(缺陷号 25835833)

  • GROUP BY和 等子句的输出HAVING已通过将 grouping_criteria表达式移动到派生查询得到改进。(错误#25549637,错误#24497007)

添加或更改的功能

  • 复制:添加 该 group_replication_transaction_size_limit 变量是为了使您能够保护组免受导致故障的大型事务的影响。(缺陷 #84785,缺陷 #25510757)

  • 复制: 组复制现在支持SAVEPOINTSQL 事务。

  • RPM.spec文件现在包括对运行单元测试的支持。(漏洞 #25814143,漏洞 #85743)

  • mysql客户端现在支持 --binary-as-hex使用十六进制表示法 ( ) 显示二进制数据 的选项。感谢 Daniël van Eeden 提供补丁。(漏洞 #25340722,漏洞 #84391)0xvalue

  • 过滤器解析器现在会为过滤器定义中的audit_log意外 JSON 元素生成错误。(缺陷号 24360663)

修正错误

  • Incompatible Change: Group Replication 和 X Plugin 等插件现在使用 mysql.session这个版本添加的帐户。如果您从不包含mysql.session帐户的先前版本升级,则必须运行mysql_upgrade以确保创建帐户。如果mysql_upgrade未运行,插件将无法启动,并显示错误消息There was an error when try to access the server with user: mysql.session@localhost。确保用户存在于服务器中并且 mysql_upgrade 在服务器更新后运行。mysqlxsys不再创建以前使用过的用户,例如 (缺陷号 26042764)

    参考资料:另请参阅:Bug #24311527、Bug #25642343、Bug #25750822、Bug #25103980、Bug #83841。

  • InnoDB:重建加密表 的ALTER TABLE操作没有正确设置加密属性。(漏洞#26243264)

  • InnoDB: 虚拟索引记录中虚拟列字段的长度小于预期的模板列长度。(缺陷号 25793677)

  • InnoDB: 服务器为重建表的操作分配了不必要的内存。(漏洞 #25573565,漏洞 #85043)

  • InnoDB: 当对引用不存在的外键的表执行操作时,foreign_key_checks 禁用、InnoDB(漏洞 #25365223)

  • InnoDB:TRUNCATE TABLE对 file-per-table 表空间进行操作期间,在从缓冲池中驱逐脏页之前释放了字典操作锁,导致闩锁顺序冲突。(漏洞#25357789)

  • InnoDB: 当使用索引合并优化器开关时,SELECT COUNT(*)操作有时会返回 0。分区代码错误地执行了memcpy索引读取的列的复制,而不是列复制,导致复制了错误的记录。(漏洞 #25332330,漏洞 #81031)

  • InnoDB: 在将RENAME TABLE表移动到不同模式的操作 InnoDB在重新启动时返回错误,指示它无法找到表空间数据文件。 InnoDB操作期间未能更新 INNODB_SYS_DATAFILES数据字典表RENAME TABLE 。(漏洞 #25189192,漏洞 #84038)

  • InnoDB:在 MySQL 5.7 中 加载InnoDB表需要更多内存,这主要是由于临时表优化引入了内存结构成员。仅用于临时表的内存结构成员现在仅在需要时分配。(缺陷号 25080442)

  • InnoDB:ALTER TABLE重建包含虚拟列的表的操作期间, InnoDB无法应用并发插入日志记录。(漏洞#24961167)

  • InnoDB: 由于虚拟列验证问题,无法InnoDB为就地操作应用并发删除日志ALTER TABLE(缺陷号 24960450)

  • InnoDB:在 MySQL 5.7 中对恢复过程的更改InnoDB可能需要在恢复期间最多扫描三次重做日志。为了减少扫描次数,合并了第一次和第二次扫描。通过此更改,除非扫描填充的重做日志记录哈希表达到其内存阈值,否则只有一次扫描。在这种情况下,会启动第二次扫描,同时执行扫描和应用。(缺陷 #22963951,缺陷 #80788)

  • 分区:ORDER BY ... DESC当查询使用索引条件下推对分区 执行逆序范围扫描(以满足 InnoDB 时,可能需要很长时间才能完成。这是由于条件下推检查未能获得范围的边界,因此扫描继续读取索引元组,直到到达索引中的第一个值。(漏洞 #83470,漏洞 #24929748)

    参考资料:另请参阅:错误 #84107。

  • 复制: 在以单主模式部署的 Group Replication 插件延迟初始化的情况下,辅助节点能够通过异步复制通道进行写入,这在 Group Replication 插件的正常初始化中是不允许的。(漏洞#26314756)

  • 复制: 使用为事件日志事件生成的 GTID,无法使用 --slave-skip-errors=1590复制从站上的启动选项跳过 MySQL 错误代码 1590 (ER_SLAVE_INCIDENT)。(缺陷号 26266758)

  • 复制:USE声明后面的 声明SET GTID_NEXT有时没有效果。(缺陷号 26128931)

  • 复制: 组现在可以包含运行不同服务器版本的成员,使您能够在线升级复制组。将不同版本的组中的成员合并的规则是:

    • 如果您的群组有 8.0 位成员,则无法添加 5​​.7 位成员

    • 如果您的群组有 5.7 位成员,您可以添加 8.0 位成员,但它仍处于只读模式。当该组包含多个服务器版本时,写入该成员是危险的,应该避免。

    在single-primary group中,如果当前primary离开group,需要选举新的primary,则primary首先从低版本的成员中选出。如果没有找到较低版本的成员,则从较新版本的成员中选择主要成员。(缺陷号 25876807)

  • Replication:binlog_checksum=NONEMySQL服务器启动后设置,然后启动Group Replication,如果出现错误,服务器保持 RECOVERING状态,无法关闭。(漏洞 #25793366,漏洞 #85667)

  • 复制: 在组复制设置中,在不同复制组的成员之间实现了循环异步复制,视图更改日志事件在组之间重复复制,每次都有新生成的 GTID。该修复确保视图更改日志事件在它们发生的命名复制组之外被忽略,并且永远不会生成新的 GTID。(漏洞#25674926)

    参考资料:另请参阅:Bug #26049695、Bug #25928854、Bug #25721175。

  • 复制: 从 RPM 安装后首次启动 MySQL 服务器时,默认情况下会激活密码验证插件(仅适用于 RPM 安装)。如果此时已经启用了二进制日志记录,则激活会被记录下来,即使插件激活不应记录在二进制日志中。(漏洞#25672750)

  • 复制: 在单主组复制与异步复制相结合的设置中,例如,S1 和 S2 组成一个组,S2 和 S3 充当主从,辅助节点(例如 S2)正在接受事务,然后这些可以进入团体。该修复可防止辅助节点在属于单一主组时创建异步复制通道,并且在运行异步复制时无法启动组复制。(漏洞 #25574200,漏洞 #85047)

    参考资料:另请参阅:Bug #86325、Bug #26078602。

  • 复制: 如果成员未能加入组,则该成员不会停止并继续接受事务。为避免这种情况,请将您的成员设置super_read_only=1my.cfg文件中。Group Replication 现在会在成功启动并设置时检查此设置 super_read_only=0。这确保没有成功加入组的成员不能接受交易。(错误#25474736,错误#84728)

  • 复制: 如果主服务器上的二进制日志被轮转,并且存储二进制日志文件的分区出现磁盘已满的情况,则服务器可能会意外停止。当转储线程切换到下一个二进制日志文件时,该修复添加了对二进制日志是否存在的检查。如果二进制日志被禁用,所有二​​进制日志直到当前活动日志被传输到slave,并向接收线程返回一个错误。(缺陷号 25076007)

  • 复制: 当事务隔离级别设置为 时,交错事务有时可能会使从属应用程序死锁 REPEATABLE-READ。(缺陷号 25040331)

  • Replication: 如果一个名为 relay log files 的 relay log 索引文件不存在,RESET SLAVE ALL有时无法完全正确清理。(漏洞 #24901077)

  • 复制: 系统slave_skip_errors变量不允许大于 3000 的错误数。感谢 Tsubasa Tanaka 提供的补丁。(错误#24748639,错误#83184)

  • 复制: mysqlbinlog,如果使用该选项调用,则 --raw在进程终止之前不会刷新输出文件。但是,如果还使用该选项调用,则 --stop-never该过程永远不会终止,因此不会将任何内容写入输出文件。现在输出在每个事件后刷新。(漏洞 #24609402)

  • 复制:修复了mysqlbinlog中 的内存泄漏泄漏发生在处理伪造的轮换事件时,或者使用时 --raw无法创建目标日志文件。泄漏仅在处理来自远程服务器的事件时发生。感谢 Laurynas Biveinis 为修复此错误所做的贡献。(漏洞 #24323288,漏洞 #82283)

  • 复制:当 时, 从服务器可能会丢失尚未应用的事件 MASTER_AUTO_POSITION=0,两个复制线程都已停止,并且使用更改了应用程序延迟 。(漏洞 #23203678,漏洞 #81232)CHANGE MASTER TO MASTER_DELAY=N

    参考资料:另请参阅:Bug #25340185、Bug #84375。

  • 复制: 大型 GCS 消息的传输可能需要很长时间,发送者似乎已经死亡。(漏洞#22671846)

  • 复制:slave_pending_jobs_size_max如果多线程从站需要处理大于该大小的事务,则 不能使用较小的队列大小进行配置 任何大于的数据包 slave_pending_jobs_size_max都被拒绝并出现错误 ER_MTS_EVENT_BIGGER_PENDING_JOBS_SIZE_MAX,即使数据包小于 设置的限制 slave_max_allowed_packet

    通过此修复, slave_pending_jobs_size_max 成为软限制而不是硬限制。如果一个数据包的大小超过 slave_pending_jobs_size_max但小于 slave_max_allowed_packet,则事务会被暂停,直到所有slave worker的队列都为空,然后再处理。所有后续交易都将暂停,直到大笔交易完成。因此,可以限制从属工作者的队列大小,同时仍然允许偶尔进行较大的事务。(缺陷 #21280753,缺陷 #77406)

  • 复制: 中断复制的事件没有写入具有 GTID 的二进制日志,因此无法使用 跳过该事件。相反,有必要直接设置中继日志文件和中继日志位置;这意味着,当启用自动定位时,必须首先禁用它,然后设置中继日志文件和位置,最后重新启用自动定位。 SET gtid_next=value

    现在在这种情况下,MySQL 将事件事件写入语句缓存,以便在刷新之前为它生成并写入一个 GTID,并且从属应用程序可以处理更改。然后用户可以使用 SQL 语句跳过事件 ,后跟和 。(漏洞#19594845)SET gtid_next=valueBEGINCOMMIT

  • 复制: 在某些情况下,master 可以向二进制日志写入一个 last_committed比它应该的值小的值。这可能会导致从服务器在不应该的并行事务中执行,从而导致不一致或其他错误。(缺陷 #84471,缺陷 #25379659)

  • 复制: 使用时 group_replication_ip_whitelist=AUTOMATIC,自动允许私有网络中的 IP,但未正确允许某些 C 类 IP 地址。(缺陷 #84329,缺陷 #25503458)

  • 复制: 当一个现有的 GTID_NEXT 事务被服务器分配了一个冲突的 GTID 时,Group Replication 在检测到两个具有相同 GTID 的事务时生成一个断言。这是因为组复制在冲突检测后生成 GTID,这比主/从复制晚。该修复放宽了一些条件,仅在提交完成时调用,并且添加了一条消息以在 GTID 已被使用时提醒您。(漏洞 #84153,漏洞 #25232042)

  • 复制:ER_INCONSISTENT_ERROR当预期错误号与实际错误号之间存在差异时, 复制应用程序线程返回错误 3002 现在可以通过将 3002 与slave_skip_errors. (缺陷 #83186,缺陷 #24753281)

  • 复制:当使用mysqldump的转储加载数据 时,MySQL 在重启后丢失了它的 GTID 位置

    为了避免出现此问题,该 mysql.gtid_executed表现在自动从 . 制作的转储中排除mysqldump。(漏洞 #82848,漏洞 #24590891)

    参考资料:另请参阅:Bug #87455、Bug #26643180。

  • 复制: 多源复制中一个通道的中继日志损坏导致服务器重启期间无法初始化良好的通道。此外,当使用 运行时 --skip-slave-start=false,服务器也无法为那些状况良好的通道启动从属线程,尽管事实上它应该为所有良好通道启动从属线程。

    现在,不管其他通道上的任何错误,服务器都会尝试创建和初始化状态良好的通道,并在 --skip-slave-start禁用时为良好通道启动从属线程。作为此修复的一部分,START SLAVE旨在 STOP SLAVE在所有通道上运行的 和 也进行了修改,以便它们继续在所有良好通道上执行,即使它们在其中发现不良通道也是如此。(漏洞 #82209,漏洞 #24285104)

  • 复制: SQL 线程无法通过 GTID 跳过部分事务。(漏洞 #81119,漏洞 #25800025)

  • Linux: MySQL 8.0 的通用 Linux 构建现在支持其主机系统上的非统一内存访问 (NUMA)。使用构建的系统需要 libnuma安装在它们上面。有关详细信息,请参阅 使用通用二进制文件在 Unix/Linux 上安装 MySQL。(漏洞 #26005558)

  • Linux: MySQL 8.0 的通用 Linux 构建现在使用 glibc2.12 在 Oracle Linux 6 上构建。使用构建的系统需要glibc安装 2.12 或更高版本。(漏洞 #26005558)

  • Debian 客户端包缺少有关与 akonadi-backend-mysql 包冲突的信息。(漏洞 #26002288)

  • mysqldumpUSE可能会在语句中错误地写入数据库名称 (缺陷号 25998635)

  • 如果mysql_stmt_close()调用 C API 函数,它会释放内存,以后可以在调用mysql_stmt_error()mysql_stmt_errno()mysql_stmt_sqlstate()时访问这些内存。要在调用 之后获取错误信息 mysql_stmt_close(),请调用 mysql_error()mysql_errno()mysql_sqlstate()。(缺陷号 25988681)

  • InnoDB 在这些情况 下,查询可能会被错误地缓存,从而导致不正确的查询结果:正在插入但尚未提交的行;查询使用该表作为派生表中的基表;优化器选择具体化派生表。(漏洞 #25943038,漏洞 #86047)

  • Debian/Ubuntu 软件包中缺少一些实用程序的手册页。(漏洞#25811814)

  • field-t单元测试无法在启用 AddressSanitizer 的情况下运行 。感谢 Laurynas Biveinis 提供补丁。(漏洞 #25803823,漏洞 #85678)

  • Debian 客户端包缺少有关与本机包冲突的信息。(漏洞#25799475)

  • #!Perl 脚本开头行中 的 Perl 路径已/usr/local/bin/perl针对 FreeBSD 11 进行了调整。(缺陷 #25719975)

  • 对于调试版本,为 Bug#59686 添加的断言过于严格,可能会在不应该出现的时候出现。(缺陷号 25685958)

    参考资料:另请参阅:Bug #59686。

  • 从优化器成本表包含生成的列的 MySQL 8.0 安装降级到 MySQL 5.7 时发生服务器退出。(缺陷号 25650399)

  • 服务器异常退出试图访问无效的内存。(漏洞 #25501659)

  • 通过mysqldTCP 包装器保护以及配置为限制来自 IP 地址的访问的 hosts.allowhosts.deny文件,来自该地址的连接尝试导致错误日志中的消息过多。(漏洞 #25476479,漏洞 #84708)

  • mysqlpump不再包括 系统数据库转储中的 slave_master_info和 表。恢复包含这些表的转储文件会因不正确地更改复制状态而导致问题。(漏洞#25469190)slave_relay_log_infomysql

  • 通过调用 mysql_options()set 所做的更改MYSQL_OPT_SSL_MODE可能会受到以后 mysql_options()调用的影响。现在设置MYSQL_OPT_SSL_MODE不受以后mysql_options()调用的影响。(漏洞#25452210)

  • CREATE TABLE带有DATA DIRECTORYorINDEX DIRECTORY 子句 的语句可能会出现竞争条件。(漏洞 #25451091)

  • 不同目录中的 MySQL 编译产生不同的构建,以将绝对路径泄漏到调试信息和 __FILE__. (错误#25436469、错误#84608、错误#25859274、错误#85855)

  • 在 SELinux 的强制模式下,keyring_okv 插件无法连接到 Oracle Key Vault 服务器。(漏洞 #25420001)

  • ALTER TABLE ... MODIFYDATETIME NOT NULL列上使用AFTER 子句导致 ER_INVALID_USE_OF_NULL错误。(缺陷号 25385334)

  • 范围优化器可能会创建不正确的查询树,从而导致服务器退出。(错误#25369742,错误#25586531)

  • --datadir如果用相对路径名指定该选项,则mysqld_failed无法启动服务器 (缺陷号 25364806)

  • XA PREPARE, XA ROLLBACK, 和 XA COMMIT对于来自断开连接的会话的事务没有获取全局提交锁并且 InnoDB即使 FLUSH TABLES WITH READ LOCK在生效时也修改了二进制日志和重做日志。当备份工具假定服务器处于只读状态时,这可能会导致备份不一致。(错误#25364178,错误#84442)

  • GROUP_CONCAT(DISTINCT)如果数据大小大于tmp_table_size系统变量的值,则返回非唯一值。(漏洞 #25331425,漏洞 #84320)

  • Bug #78777 的修复有不同的效果,具体取决于是否启用了 Performance Schema。(漏洞 #25309017,漏洞 #84305)

    参考:这个问题是 Bug #78777 的回归。

  • 某些嵌套查询中的聚合函数可能会导致服务器退出。(漏洞 #25303711)

  • 如果更改连接字符集,使用CONV()or 函数 的虚拟生成列表达式 可能会导致问题。HEX()在此上下文中,表字符集现在用于这些函数,而不管连接字符集如何。(缺陷号 25287633)

  • 如果启用了系统变量 ,Rewriter插件不会正确执行锁定。read_only(缺陷号 25264253)

  • read_only启用后,在特定条件下允许非用户创建 非表TEMPORARYSUPER(缺陷号 25250768)

  • 对于具有默认值为TIMESTAMP或 的列 的表,如果表具有触发器,则可以将该列初始化为。(漏洞 #25209512,漏洞 #84077)DATETIMECURRENT_TIMESTAMP0000-00-00 00:00:00'BEFORE INSERT

  • 某些存储函数,如果在查询 WHERE子句中使用,可以使用索引条件下推(这不应该发生)来处理,从而导致服务器退出。(错误#25196653,错误#25174454)

  • 如果启用了系统变量的标志,则针对InnoDB使用主键和子查询的表的 某些查询可能会返回不正确的结果。(缺陷 #24829050,缺陷 #79675)index_merge_intersectionoptimizer_switch

  • 如果配置文件中缺少keyring_okv该设置,则插件 初始化失败 ,这实际上是一项强制设置。 现在是可选的。(漏洞 #24816271)STANDBY_SERVERokvclient.oraSTANDBY_SERVER

  • 在 x86 机器上,uint3korr()宏读取 4 个字节的数据而不是预期的 3 个字节。(漏洞 #24807826,漏洞 #83264)

  • 在 memcached 插件的提取操作期间引发了断言。(漏洞 #24605783)

  • 包含UNION在子查询中并GROUP BY可能返回不正确结果的查询。(漏洞 #24595639)

  • LONGTEXT当在子查询中使用 确定性函数返回时,服务器可以取消引用空指针。(漏洞 #24595581)

  • 如果子句 的一部分引用列列表中的值 INSERT,则在存储程序或准备语句上下文中执行的语句 可能会出现不正确的行为 。(错误#24538207、错误#25361251、错误#25530880、错误#25684790)VALUESON DUPLICATE KEY UPDATEBLOBINSERT

  • Debian 软件包中的 systemd 支持脚本包含对数据目录的硬编码引用,因此很难使用 --datadir. (漏洞 #24398446,漏洞 #82417)

  • MySQL 无法使用 Clang 在 macOS 10.10.5 下编译。(漏洞 #24352163,漏洞 #82340)

  • 如果REPLACE语句试图更新包含 类型的虚拟生成列的表中的行BLOB,则后续 DML 语句的行为可能不正确。(漏洞 #23573575)

  • 一些PROXY授权没有复制到从属,导致不正确的复制。(错误#23289541、错误#81424、错误#23623115)

  • 改进了mysqlxtest 的帮助输出。(漏洞 #23107137,漏洞 #81086)

  • keyring_file 编译器标志进行了调整,以消除使用 Clang 编译插件时出现的大量警告。(缺陷 #22834591,缺陷 #80524)

  • 如果启用 Event Scheduler 导致定义为 ON COMPLETION NOT PRESERVE被删除的事件,因为它的执行时间已经过去,则删除事件不会写入二进制日志,导致从属不复制它并且如果稍后创建同名事件则复制失败. (缺陷号 22150112)

  • LOAD XML当读取的 XML 文件包含大量空格时,性能会明显变慢,例如通过缩进或漂亮打印引入的空格。现在,在将每个这样的值读入内存之前,所有前导空格都会被删除。(漏洞 #16212207)