Documentation Home
MySQL 5.7 发行说明  /  MySQL 5.7.14 的变化(2016-07-29,全面上市)

MySQL 5.7.14 的变化(2016-07-29,全面上市)

编译笔记

  • CMake添加了对使用 Developer Studio 12.5 进行编译的支持。(错误#82249、错误#24303829、错误#81274、错误#23212938)

弃用和移除说明

  • 为选项指定空值--port(例如 , --port=--port=""现已弃用并会导致警告。空值在 MySQL 8.0 中将是一个错误。(缺陷 #23023457,缺陷 #80903)

包装说明

  • 捆绑的 Protobuf 源(在 extra目录下)从版本 2.6.0 升级到 2.6.1。(漏洞 #81280,漏洞 #23213376)

性能模式注释

sys架构注释

  • sys模式现在有一个 quote_identifier()函数,给定一个字符串参数,生成一个适合包含在 SQL 语句中的带引号的标识符。(缺陷 #22011361,缺陷 #78823)

  • sys模式 过程 的输出diagnostics()现在包括系统表中 的Tls_version列 。mysql.slave_master_info

测试套件说明

  • mysql-test-run.pl现在有一个 --manual-boot-gdb类似于 --boot-gdb但在引导过程中将调试器附加到服务器的选项,允许使用远程调试器。(缺陷号 23090633)

X 插件说明

  • Protobuf解码器类将嵌套对象的数量限制为 50(默认值) 。(漏洞 #23707238,漏洞 #82025)

  • 该语句list_objects错误地将表报告为集合。(漏洞 #23631240)

  • 使用 SSL 时,仅接受 TLSv1 连接。该修复确保接受服务器支持的所有 TLS 版本。(漏洞 #23524243)

  • 该语句创建了一个集合表,该表在列上而不是在主键create_collection上具有唯一键索引 。'_id'(漏洞 #23284569)

  • 尝试在 list_objects未显式设置数据库名称的情况下使用该语句列出对象会导致集合被错误地归类为表。(漏洞 #23205895,漏洞 #81248)

  • 与 X 插件相关的测试已移至 rapid/plugin/x/test. (漏洞 #23151414)

  • 从使用 X 协议的会话中 设置协议相关变量(例如 net_read_timeoutnet_write_timeout和 )会返回意外结果。net_retry_count该修复确保仅从使用 MySQL 协议的会话设置协议变量,并正确检测使用 X 协议的会话的错误。

添加或更改的功能

  • RHEL/OEL 和 Fedora 版本的 RPM 包的%global compatver值已从 5.6.25 更新到 5.6.31。(缺陷号 23038018)

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

修正错误

  • 性能: 用于附加字符串值的内存分配缺陷导致某些操作执行缓慢,包括创建具有生成列的表以及将大值插入JSON列中。(缺陷 #80556,缺陷 #22843444)

    参考资料:另请参阅:Bug #22157531、Bug #22239803。

  • InnoDB: 全文搜索辅助表在被另一个会话访问时可能会被一个会话删除。(漏洞 #23742339)

  • InnoDB: 为已删除的表选择全文索引信息架构表导致分段错误。(漏洞 #23479595)

  • InnoDB: 表空间操作没有正确更新 SYS_VIRTUAL系统表。(缺陷号 23325659)

  • InnoDB: 全文索引同步操作的回滚引发了断言。回滚操作试图获取仍由后台同步线程持有的互斥量。(漏洞 #23320569)

  • InnoDB: 压缩表后,将不正确的数据长度传递给内部表空间加密函数,导致断言。(缺陷号 23279788)

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

  • InnoDB: 在搜索操作期间放置的 R-tree 页面锁阻止了同一事务中的撤消操作合并页面。(漏洞 #23241575)

  • InnoDB: 压缩大小大于压缩页面大小一半的记录的批量加载插入导致在压缩未压缩页面时无限 B 树页面拆分。(漏洞 #23120933)

  • InnoDB:InnoDB与 全文搜索 相关的锁定顺序违规(漏洞 #23120005)

    参考资料:此问题是 Bug #22996488 的回归。

  • InnoDB: 在只读模式下,InnoDB试图在SYS_INDEXES系统表中设置损坏位。在只读模式下,损坏应该只在内存中标记。(缺陷号 23077748)

  • InnoDB: InnoDB尝试实现分区不需要的非键虚拟生成列。(缺陷号 23037025)

    参考资料:此问题是 Bug #21864838 的回归。

  • InnoDB: 由于在页面拆分期间遇到无效的父路径,对包含虚拟和空间索引的表的插入操作引发了断言。(漏洞 #23008863)

  • InnoDB:ALTER TABLE对具有索引虚拟列的表 的(缺陷号 22965271)

  • InnoDB:由于活动memcached连接 持有表句柄,添加或删除虚拟生成的列可能会引发断言 (漏洞 #22922527)

  • InnoDB: 涉及大量记录的全文查询超出结果缓存限制并导致服务器退出。(漏洞 #22709692,漏洞 #80296)

  • InnoDB: InnoDB没有阻止在存储的生成列的基列上使用引用操作创建外键约束。(缺陷 #22687023,缺陷 #80304)

  • InnoDB:MATCH当优化器未选择用于全文查询的二级索引时, 优化器无法标记函数评估所需的列 (缺陷 #22679209,缺陷 #80298)

  • InnoDB:READ COMMITTED隔离级别,InnoDB不必要地 为由只读 语句lock_sys互斥锁 感谢翟伟祥的补丁。(错误#22617328,错误#76728)COMMITSELECT

  • InnoDB: 设置innodb_monitor_enableall未启用所有计数器。(漏洞 #22576241,漏洞 #80083)

  • InnoDB: InnoDB现在允许在索引虚拟列的基列上定义具有级联引用操作的外键约束,以及在显式包含在虚拟索引中的非虚拟外键列上定义级联引用操作。(缺陷 #22469130,缺陷 #79772)

  • InnoDB:ALTER TABLE在删除和添加二级索引 的操作回滚期间引发断言 (漏洞 #22005726)

  • 分区: 在某些情况下,在解析时已修剪所有分区后,在优化期间第二次尝试分区修剪的问题会导致断言。(漏洞 #23194259)

  • 复制: 缺乏清理binlog.binlog_index导致 i_binlog.binlog_index_crlf_check测试中出现零星失败。(漏洞 #23645554)

  • 复制: 复制从属可能会退出尝试应用 UPDATE包含从设置为 的主接收的虚拟生成列的行事件 binlog_row_image=minimal。(漏洞 #23604483)

  • 复制: 从 MySQL 5.6 升级后,MySQL 5.7 从站无法正确处理复制通道。这是由于升级过程颠倒了 mysql.slave_master_info表中两个字段的顺序 (Channel_NameTls_version)。该修复避免了这种反转并添加了检查以确保 Channel_name正确用作主键。(缺陷号 23180202)

  • 复制: 测试i_rpl.rpl_relay_log_index_inconsistency 在某些情况下没有保留从服务器状态。该修复程序将测试改为使用 start_slave.inc。(漏洞 #22850741)

  • 复制: 处理大型 GTID 集(转换为字符串时大于 64 KB)时,该 replication_connection_status字段会截断RECEIVED_TRANSACTION_SET. 该修复程序更新 replication_connection_status以正确显示大型 GTID 集,还更新了各种 GTID 集相关函数以避免将来出现大型 GTID 集的任何问题。(缺陷号 22369630)

  • 复制: 在基于 GTID 的复制从站上运行 并使用 --gtid-mode=ON, 当遇到应该忽略的错误时 没有正确更新,导致与 失去同步。如果 未指定 a,则从单个语句事务回滚时,slave 将永远不会更新其 GTID 状态。不会更新,因为即使事务已完成,它的 GTID 状态也会以其他方式显示。 该修复消除了仅在指定时回滚事务时更新 GTID 状态的限制 (缺陷号 22268777)--log-bin=OFF--slave-skip-errorsExec_Master_Log_PosExec_Master_Log_PosRead_master_log_posGTID_NEXTExec_Master_Log_PosGTID_NEXT

  • 复制: 与用户定义的变量相关的未清除信息可能导致 DROP TEMPORARY TABLE语句的服务器退出。(缺陷号 22157118)

  • 复制: 服务器初始化 --gtid-mode=ON--enforce-gtid-consistency=ON 创建了一个大型且不必要的 GTID 集。该修复程序调整了初始化过程以消除这些 GTID 集的创建。(错误#22102456,错误#78972)

  • 复制: 格式不正确的 server_uuid读入 auto.conf可能会导致意外停止。(缺陷号 21936933)

  • 复制: 发出PURGE BINARY LOGS 语句后,如果二进制日志索引文件不可用,例如因为它已被另一个应用程序(如 MEB)打开,服务器可能会意外停止。尽管这种情况很少见,但已使处理更加稳健以避免意外停止,并提供了更多信息性错误。(缺陷号 20381055)

  • 复制: 的构造函数Rows_event已得到改进,不会一次一个字节地解码提供的行事件。感谢 Davi Arnaut 的贡献。(缺陷 #82003,缺陷 #23699294)

  • 复制: 频道服务接口新增了获取频道的retrieved_gtid_set. (错误#81694,错误#23519893)

  • 复制: 初始化过程现在检查在处理编译语句时是否启用了二进制日志。在这种情况下,它会禁用二进制日志记录,从而避免为 MySQL 初始化语句不必要地填充二进制日志(并生成 GTID)。(漏洞 #81628,漏洞 #23490641)

  • 复制: 运行 MySQL 版本 5.7.11 及更高版本的从站总是在服务器支持时使用 SSL/TLS,无论 MASTER_SSL选项如何。这是由于添加了--ssl-mode 选项,默认情况下首选 SSL 连接。该修复程序确保从站在 MASTER_SSL=0. (缺陷 #81223,缺陷 #23197529)

  • 复制: mysql-test-run.pl选项 现在可以--skip-rpl正确地跳过所有复制测试。感谢 Daniel Black 的贡献。(缺陷 #80894,缺陷 #23021140)

  • 复制: 当 时--gtid-mode=OFF,发出 语句导致系统读取整个文件。根据文件的大小,这可能会导致服务器停止几秒钟。这是由于在二进制日志文件中搜索值的方式所致。如果应该只读取丢失的 GTID 并 找到事件,该修复程序会添加一个优化来停止读取二进制日志文件。(缺陷 #80889,缺陷 #23054591)PURGE BINARY LOGS TO filePrevious_gtidsPrevious_gtids

  • 复制: 当使用基于行的复制和InnoDB时,当事务已经获得与语句类型相关的锁时,复制从属恢复为使用旧的锁定方案 ,从而降低了复制从属性能AUTOINC。此修复可确保为任何 DML 事件(例如 、 和 。(错误#79324,错误#22247668)LOAD FILEINSERT ... SELECTsql_commandWRITE_ROWS_EVENTUPDATE_EVENTDELETE_EVENT

  • 复制: 一个 MySQL 5.5 版本的从服务器没有一个 server_uuid复制标识的服务器 server_id。从 MySQL 5.6 版本开始,复制主服务器仅根据从服务器的 server_uuid值检测僵尸转储线程,假设每个从服务器都有唯一的 UUID。将 MySQL 5.5 从站连接到 MySQL 5.6 及更高版本的主站意味着主站无法检测到为服务运行早于 MySQL 5.6 的从站而创建的僵尸转储线程。该修复程序确保主服务器现在首先检查从服务器是否有一个 server_uuid集合。如果它被设置,僵尸转储线程检测基于从属的 UUID 发生。如果一个奴隶的server_uuid未设置,僵尸转储线程检测基于 server_id. (错误#77195,错误#21179199)

  • 复制:启用后,仍然存在未正确忽略 从slave_skip_errors站错误的特殊情况。例如:

    • 打开和锁定表失败。

    • 当字段转换在运行基于行的复制的服务器上失败时。

    在这些情况下,错误被认为是严重的,并且不尊重 的状态 slave_skip_errors。该修复程序确保 slave_skip_errors启用后,在应用事务期间报告的所有错误都得到正确处理。这意味着在这样的设置中,在收到log_warnings 选项设置为大于 1 的错误时,如果可以忽略该错误,则该警告将打印到错误日志中,并且服务器将继续执行,就像在其他忽略的情况下一样错误。(错误#70640,错误#17653275)

  • 复制: 当使用基于语句或混合二进制日志记录格式时 --read-only=ON,无法修改临时表。(缺陷 #62008,缺陷 #12818255)

    参考资料:另请参阅:Bug #14294223、Bug #16561483。

  • Solaris: CMake配置在使符号不可见方面过于激进,导致 Solaris 上的 GCC 5.3 出现链接问题。(缺陷 #23344916,缺陷 #81593)

  • Solaris: 在 Solaris 上,从 global_status性能模式表中进行选择时,未对齐的内存缓冲区可能会导致服务器退出。(缺陷 #81065,缺陷 #23097305)

  • 从 MySQL 5.6 Community 升级到 MySQL 5.7 Community 或 MySQL 5.6 Commercial 到 MySQL 5.7 Commercial 时,使用 RPM 包执行的 MySQL Server 升级失败。(缺陷号 23736787)

  • 在 CentOS 上,如果使用未指定值的文件, 从 MySQL Community 发行版安装的mysqld将无法启动 。(漏洞 #23721277,漏洞 #82049)my.cnfdatadir

  • CMake选项 在最近版本的库中失败。(错误#23708332、错误#25391997、错误#84501)-DWITH_EDITLINE=system editline

  • 在安装插件的情况下执行准备好的语句 audit_log可能会导致服务器退出。(漏洞 #23699991)

  • 对于 不受 支持的 语句、 找不到表的语句以及在监视期间未找到摘要的语句,sys模式 过程失败。(漏洞 #23621189)ps_trace_statement_digest()EXPLAINEXPLAIN

  • 在基于 RPM 的系统上,现在可以更轻松地安装多个客户端库版本,例如您希望保持与链接到以前库的旧应用程序的兼容性的情况。要安装较旧的客户端库,请使用 --oldpackage带有 rpm的选项。例如,要 mysql-community-libs-5.5在具有libmysqlclient.20MySQL 5.7 的 EL6 系统上安装,请使用如下命令:

    rpm --oldpackage -ivh mysql-community-libs-5.5.50-2.el6.x86_64.rpm

    (漏洞 #23605713,漏洞 #81384)

  • SELECT内部缓冲区已满时的性能模式表可能会导致服务器退出 。(错误#23550835、错误#23298025、错误#81464)

  • 用于从 Performance Schema 语句事件表(例如, events_statements_current)读取字符集信息的代码不会阻止同时写入该信息。结果,SQL 查询文本字符集可能无效,这可能导致服务器退出。现在无效的字符集会导致 SQL_TEXT列截断。(漏洞 #23540008)

  • 错误消息的拼写错误已得到纠正。感谢 Derek Jones 提供补丁。(漏洞 #23525874,漏洞 #81713)

  • 在 Performance Schema 中,在缓冲区已满时分配记录可能会导致服务器退出。(漏洞 #23515302)

  • 修复了 Debian/Ubuntu 软件包的几个问题:

    • 包中的mysql-systemd-start脚本 mysql-community-server依赖于mysqladmin 命令ping。包含此脚本的包现在依赖于 mysql-community-client包。

    • systemd 服务仍然使用 mysqld_safe。它现在使用mysqld --daemonize

    • root在安装过程中 输入空白密码导致安装挂起。

    • MySQL 升级未能创建丢失的数据目录。

    • 此外,CMake为 Debian/Ubuntu 软件包生成的包装进行了重构以提高可维护性。

    (错误#23501369、错误#81647、错误#22972977、错误#21236550、错误#21228746、错误#22833016、错误#23582336)

  • 库中的缓冲区溢出regex是固定的。(漏洞 #23498283)

  • 从本机 MySQL 5.6 Debian/Ubuntu 软件包升级到 Oracle 提供的 MySQL 5.7 软件包导致服务器重启失败。(缺陷号 23498230)

  • 针对用户的审核日志过滤正在执行比较USER(),而不是 CURRENT_USER()。(漏洞 #23344762,漏洞 #81591)

  • 仅使用 RPM 包升级服务器后,服务器可能无法启动,抱怨 errmsg.sys文件错误。(缺陷号 23338603)

    参考资料:此问题是 Bug #18518216 的回归。

  • sys 显示启用或禁用性能架构设置 的架构存储过程中解决了几个问题:

    • 启用和禁用的帐户显示为 host@user,而不是 user@host

    • 中的禁用用户 ps_setup_show_disabled被称为enabled_users

    • ps_setup_show_enabled()显示禁用的对象。

    • setup_actors内容未被过滤(无论演员是启用还是禁用,所有行都被返回)。

    • 输出顺序更具确定性。

    (错误#23335880、错误#81564、错误#22066096、错误#78874)

  • 从本机 Ubuntu 5.7.12 包升级到 MySQL 5.7.13 包失败并显示冲突消息。(缺陷号 23327563)

  • audit_log对于调试版本,如果在加载插件并存在活动连接 时发出关闭命令,服务器将异常退出。(缺陷号 23310864)

  • 服务器可能无法将过期密码解释为已过期。(漏洞 #23291841)

  • 的某些参数NAME_CONST() 可能导致服务器退出。(缺陷号 23279858)

  • 对于使用 MySQL 测试套件进行的单元测试,make unit-test命令不再可用。应改用ctest程序 。请参阅 MySQL Server Doxygen 文档,网址为 https://mysql.net.cn/doc/index-other.html。(漏洞 #23273434,漏洞 #81389)

  • 审计日志插件(包括使用审计 API 的查询重写插件)按语句获取和发布,对可扩展性产生负面影响。为了提高性能,这些插件现在只获取一次,仅在连接结束时才释放。(漏洞 #23236404,漏洞 #81298)

  • GCC 选项导致ARM64-fexpensive-optimizations和 PowerPC 构建计算浮点运算与其他平台略有不同。 CMake现在检查此问题并在必要时禁用该选项。(漏洞 #23046775)

  • test_service_sql_api.test_session_general_log 测试用例现在通过在测试结束时截断表来清理 表 general_log。感谢 Daniel Black 提供的补丁。(缺陷 #23021111,缺陷 #80895)

  • 如果线程 ID 占用五个或更多字符,则写入错误日志的行没有分隔时间戳和线程 ID 列的空格。(漏洞 #23005009,漏洞 #80854)

  • 对于 innodb_buffer_stats_by_schema和 架构视图, 和 列不正确。感谢 Tsubasa Tanaka 提供补丁。(漏洞 #22988461,漏洞 #80833)innodb_buffer_stats_by_table syspages_hashedpages_old

  • 与直接使用基表的类似查询相比,如果查询 在主查询块WHERE的条件内的标量子 查询中包含条件,则使用合并的派生表或视图的查询可能会返回不正确的结果。HAVING(缺陷号 22967439)

  • ST_GeomFromGeoJSON()被 视为无效输入。现在它将视为SQL ,因此返回 SQL以供 输入。(缺陷 #22930020,缺陷 #80712)JSON NULLJSON NULLNULLNULLJSON NULL

  • 对于 host_summary_by_statement_latency 和 schema 视图,该 列不正确。(漏洞 #22848110,漏洞 #80569)x$host_summary_by_statement_latency sysmax_latency

  • ST_Distance()NULL可以对返回值提出断言。(缺陷号 22760390)

  • 在没有 SQL_CALC_FOUND_ROWS 的情况下,即使存在, FOUND_ROWS()语句 UNION也始终返回找到的实际行数 LIMIT。(错误#22602381,错误#80148)

  • 当查询重写插件尝试记录语句时,包含格式说明符的语句导致服务器退出。(漏洞 #22601485)

  • 启用查询缓存后,执行准备好的语句CURSOR_TYPE_READ_ONLY然后再次执行会CURSOR_TYPE_NO_CURSOR导致服务器返回错误。(缺陷 #22559575,缺陷 #80026)

  • mysql_real_connect()MYSQL_READ_DEFAULT_FILE在启用或 MYSQL_READ_DEFAULT_GROUP选项的情况下调用时不是线程安全的 。(缺陷 #22322504,缺陷 #79510)

  • 启用 GTID 后,XA COMMIT在多语句事务中的断开连接的 XA 事务上引发断言。(错误号 22173903)

  • 如果同义词名称是保留字或包含反引号 ( ) 字符 ,则sys架构 函数失败。(缺陷 #22011361,缺陷 #78823)create_synonym_db()`

  • sys架构 host_summary视图可能会因被零除错误而失败 。(缺陷号 21970078)

  • 错误 #21552524 添加的用于在 ARM64 上编译的 GCC 解决方法仅适用于 5.2.1 之前的 GCC。(缺陷号 21845828)

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

  • sys模式 函数替换了路径名参数 的format_path()子字符串,但未验证子字符串是否由路径名分隔符分隔。替换现在可以正常工作,包括在 Windows 上。结果是 Windows 路径名中的反斜杠不再转换为结果中的正斜杠。(漏洞 #21512106)

  • MySQL 现在支持使用 __atomicGCC 4.7 中引入的 GCC 内置编译,允许更有效地实现 MySQL 原子 API。这些__atomic内置插件仅用于旧 GCC__sync内置插件不可用的平台,例如服务器不会构建的 PowerPC。(漏洞 #21221500)

  • 如果存储函数更新了一个视图,而视图表为其定义了一个更新另一个表的触发器,它可能会失败并报告现有表不存在的错误。(缺陷 #21142859,缺陷 #76808)

  • 如果数据库目录存在但为空,则mysql_upgrade无法升级 sys模式sys(错误#81352、错误#23249846、错误#22875519)

  • protobufProtobuf 当前仅由 X 插件使用,但即使 X 插件构建被禁用, MySQL 构建库和可执行文件也是如此-DWITH_RAPID=0。(缺陷 #81066,缺陷 #23097750)

  • make_link()更正了在 C++11 模式下编译时调用 的编译错误 。感谢 Daniel Black 的贡献。(缺陷 #80996,缺陷 #23080289)

  • 由于清理不当,两个mysql-test-run.pl测试(ctype_gb18030_binlogctype_ldml)未能产生可重复的输出。感谢 Daniel Black 提供的补丁。(缺陷 #80896,缺陷 #23021095)

  • MySQL 无法使用 GCC 6 使用 C++ 的默认模式构建-std=gnu++14. CMake 配置已调整为明确设置 GCC 6 的模式 。-std=gnu++03(Bug #80371,Bug #22732697)

  • Ubuntu 软件包root使用身份验证插件创建用户帐户,以在使用空白密码auth_socket完成安装时实现默认安全安装。root但是, auth_socket即使密码不为空,也会被使用。(错误#80137、错误#22594846、错误#23321113、错误#81518)

  • 对于 2.0 或更高版本, 编译InnoDB memcached插件在使用配置 MySQL 的某些平台上不起作用 。(错误#80073、错误#22573379、错误#23567441)-DWITH_LIBEVENT=systemlibevent

  • 客户端插件取消初始化函数签名已从更改int (*deinit)()int (*deinit)(void)以避免在使用 -Wstrict-prototypes. (错误#78177、错误#21680094、错误#81419、错误#23282498)