Documentation Home
MySQL 5.6 发行说明  /  MySQL 5.6.21 的变化(2014-09-23,全面上市)

MySQL 5.6.21 的变化(2014-09-23,全面上市)

弃用和移除说明

  • 系统thread_concurrency变量已弃用,但在服务器启动时设置它不会产生警告。(漏洞 #17873011)

  • --skip-innodb 选项现已弃用,其使用会导致警告。它将在未来的 MySQL 版本中被删除。这也适用于它的同义词(--innodb=OFF--disable-innodb等等)。

MySQL 企业笔记

  • MySQL 企业版现在包括一组基于 OpenSSL 库的加密函数,这些函数在 SQL 级别公开 OpenSSL 功能。这些功能使企业应用程序能够执行以下操作:

    • 使用公钥非对称加密实现额外的数据保护

    • 创建公钥和私钥以及数字签名

    • 执行非对称加密和解密

    • 使用加密哈希进行数字签名以及数据验证和确认

    有关详细信息,请参阅 MySQL 企业加密

添加或更改的功能

  • 复制: 新变量 simplified_binlog_gtid_recovery 可用于更改二进制日志文件在恢复期间搜索先前 GTID 的方式,从而在存在大量二进制日志文件时加快该过程。(错误#69097、错误#16741603、错误#74071、错误#19686914)

  • 在内部,空间数据类型如 Geometry表示为 值,因此当使用该选项 BLOB调用时 , mysqldump现在以十六进制显示空间值。(错误#43544,错误#11752369)--hex-blob

修正错误

  • 创新数据库;分区:在 MySQL 5.6 或 5.7 中使用 大量分区InnoDB 表可能会消耗比以前版本的 MySQL 服务器中使用的相同表所使用的内存更多的内存。(错误#17780517,错误#70641)

    参考资料:此问题是 Bug #11764622、Bug #57480 的回归。

  • InnoDB: 操作ALTER TABLE ... ADD FOREIGN KEY可能导致严重错误。(缺陷 #19471516,缺陷 #73650)

  • InnoDB: 在调试版本中,INSERT 影响压缩表的操作会引发与同步相关的断言。(漏洞 #19295893)

  • InnoDB: 使用单个 get命令检索多个值将返回不正确的结果而不是错误消息。InnoDB memcached插件当前不支持使用单个 get命令检索多个值。(缺陷 #19172212,缺陷 #72453)

  • InnoDB: 尝试对超时键执行操作会导致memcached守护进程崩溃并重新启动。(错误#19172013,错误#72586)

  • InnoDB: 事务隔离级别小于或等于 READ COMMITTED,在扫描唯一二级索引以检查重复项时未采用间隙锁。因此,重复检查逻辑无法在唯一二级索引中允许重复的键值。(漏洞 #19140907)

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

  • InnoDB: 在恢复期间,将表标记为损坏时会发生分段错误。(漏洞#18942294)

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

  • InnoDB: 一个失败的就地ALTER TABLE 操作会在数据字典中留下非唯一的临时文件名,从而防止ALTER TABLE由于临时文件名冲突而在同一个表上进行未来的操作。ut_time()为避免此问题,通过附加一个静态全局编号使临时文件名具有唯一性,该全局编号使用和初始化为随机分布的 32 位编号 ut_crc32()。然后为每个分配的临时文件名自动增加该数字。以前,临时文件使用格式命名#sql-ibtid,其中 tid是表 ID。临时文件现在使用格式命名#sql-ibtid-inc,其中tid表 ID 和 inc是递增的数字。(错误#18734396,错误#72594)

  • InnoDB: 在极少数情况下,清除过程会尝试删除未标记为删除的二级索引记录,从而导致二级索引不一致。(漏洞#18631496)

  • InnoDB: srv_active_wake_master_thread()直接在innobase_commitand innobase_prepare,唤醒master线程自增srv_activity_countsrv_active_wake_master_thread()只应在提交写入事务后调用,而不应在只读事务或回滚后调用。此修补程序还将对的一些调用替换为srv_active_wake_master_thread() 对 的调用ib_wake_master_thread()。(错误#18477009,错误#72137)

  • InnoDB:ALTER TABLE对具有损坏的外键约束的表进行 就地(漏洞 #16869435)

  • InnoDB: 将一条记录插入到一​​个InnoDB表中,其键落在整页的最大键和下一页的最小键之间,可能会导致不必要的页面拆分和页面填充不足。如果插入点位于页面末尾,InnoDB现在会尝试在拆分页面之前插入到下一页。(漏洞 #15923864,漏洞 #67718)

  • 复制: 修复 Bug #16861624 后,杀死等待提交锁的多线程从属工作者导致调试断言失败。此修复可确保不会发生这种情况。(漏洞 #19311260)

  • 复制: 提交事务时,现在使用一个标志来检查线程是否已创建,而不是检查线程本身,这会占用更多资源,尤其是在使用 master_info_repository=TABLE. (漏洞 #18684222)

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

  • 复制: 当使用启用的 GTID 时 由于部分事务在恢复 I/O 线程之前未正确回滚而MASTER_AUTO_POSITION 失败并出现 ER_GTID_NEXT_TYPE_UNDEFINED_GROUP此修复可确保正确回滚部分事务。(漏洞 #18472603)

  • 复制:mysqlbinlog将多个二进制日志文件处理成单个输出文件时,该文件不处于对时间点恢复有用的状态,当它因错误而失败时,当@@SESSION.GTID_NEXT 设置为 GTID 时,您必须在 COMMIT 或 ROLLBACK 之后显式地将其设置为不同的值。请查看 GTID_NEXT 变量手册页以获取详细说明。当前 @@SESSION.GTID_NEXT 是 ' xyz'。当 mysqlbinlog处理包含 GTID 的二进制日志时,它会输出 语句,但 每当发生提交时都会设置为未定义;这离开了SET gtid_nextgtid_nextgtid_next当服务器完成处理 mysqlbinlog的输出时未定义。当下一个二进制日志文件以一个或多个匿名语句或事务开始时,gtid_next 的组合在第一个二进制日志末尾未定义,第二个二进制日志包含匿名事务,导致前面描述的错误(错误 1837, ER_GTID_NEXT_TYPE_UNDEFINED_GROUP)。

    为了解决这个问题,现在,每当mysqlbinlog 遇到这种情况时,它都会SET gtid_next = AUTOMATIC根据需要插入,以避免使以前的二进制日志gtid_next未定义。

    此外,作为此修复的结果, mysqlbinlog不再为每个二进制日志输出会话变量信息;现在,这个值只打印一次,除非它发生变化。(错误#18258933,错误#71695)

  • 复制: 当 I/O 线程在事务中间使用 GTID 和多线程从属重新连接到主时,它未能中止事务,在中继日志中留下部分事务,然后再次检索相同的事务。这发生在执行中继日志轮换时。现在,当重新连接时,服务器会在这种情况下轮转日志之前进行检查,并首先等待任何正在进行的事务完成。(漏洞 #17326020)

  • 复制:CLIENT_REMEMBER_OPTIONS不再重置压缩从属连接 的这会将所有选项的功能恢复到压缩的从属连接。(错误#72901、错误#18923691、错误#73324、错误#19244772)

  • 复制: 当使用基于行的复制时,将从属 slave_rows_search_algorithms 变量设置为HASH_SCAN导致 ER_KEY_NOT_FOUND错误,即使该记录存在于存储层中。此修复可确保正确维护每条记录的唯一键,并且不会发生这种情况。(错误#72788,错误#18860225)

  • 复制: 当使用基于行的复制时,如果从服务器的表结构与主服务器的表结构不兼容,则运行涉及大量事件的长事务可能会触发内存不足 (OOM) 错误。如果从属服务器上的表被手动更改,或者在具有不同数据类型的不同 MySQL 版本之间进行复制,则可能会出现这种不兼容的情况。这个 OOM 错误是因为为行转换创建的虚拟临时表直到事务结束才被释放,这在复制大量事件时是一个问题。

    从这个版本开始,这样的虚拟表在转换过程中被正确释放。(错误#72610,错误#18770469)

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

  • 复制: 复制期间复制服务器 UUID 导致问题时生成的错误消息已得到改进。slave 错误现在标识重复的服务器 UUID,master 错误标识已被杀死的僵尸线程。(错误#72578,错误#18731211)

  • 复制: 当一个事件组跨越多个中继日志文件时,从站可能会错误地识别 GTID 标头组边界。这意味着当一个事务被重试时,或者如果 SQL 线程在一些旋转之后在事务中间停止,则Gtid_log_event在从属服务器上被静默地跳过,并且事务被记录在从属服务器的 GTID 中。此问题还影响了在 启用 GTID 的情况下使用。如果在交易的中间,START SLAVE UNTIL MASTER_LOG_POS = log_pos;log_posGtid_log_event未被正确检测为事务的开始,复制在此事件之前停止。通过此修复,线程可以正确检测到它们是组的一部分,这用于检查 aGtid_log_event是否是事务的一部分。(错误#72313、错误#18652178、错误#18306199)

  • 复制: 在使用半同步复制的主服务器上, rpl_semi_sync_master_wait_no_slave 已启用并 rpl_semi_sync_master_timeout设置为长时间超时,杀死 I/O 线程可能会导致服务器在关闭时挂起。此修复可确保如果转储线程发现没有半同步从站连接到主站, rpl_semi_sync_master_wait_no_slave则忽略设置并正确关闭。(错误#71047,错误#17879675)

  • 复制: 使用半同步复制时,如果二进制日志位置更改为从服务器上的未来位置,则在主服务器上生成断言错误。此修复可确保在这种情况下正确确认未来位置,并在从站上生成错误。(错误#70327,错误#17453826)

  • 复制: 当一个正在等待提交锁的 SQL 线程被杀死并重新启动时,它会导致在从服务器上跳过一个事务。此修复可确保正确保留线程位置并在正确位置恢复事务。(漏洞 #69873,漏洞 #17450876)

  • 启用 DTrace 支持后,某些其他编译选项可能会导致构建失败。(漏洞 #19506247)

  • yaSSL 客户端代码未验证加密大小或会话 ID 长度,这可能会导致客户端退出。(错误#19463277,错误#19463565)

  • 如果客户端提供的缓冲区长度不准确,yaSSL 可能会导致预授权失败。(漏洞 #19370676,漏洞 #19355577)

  • 线程之间的竞争可能会导致尝试轮换审计日志文件时超时失败。(漏洞 #19184973)

  • LPAD()如果填充字符串参数格式不正确,RPAD()可能会导致服务器退出。(漏洞 #18935421)

  • 优化器可以为临时表创建零长度列,从而导致服务器退出。(漏洞#18928848)

  • MOD对于非常小的十进制右手参数可能会导致服务器退出。(漏洞#18469276)

  • 客户端库现在包含 X509_verify_cert_error_string()对 SSL 证书验证代码的调用,以便更可靠地检测无效证书。(漏洞 #18384260)

  • 如果谓词的左侧IN是标量子查询但未返回任何行,则服务器可以退出。(错误#18223655,错误#18447874)

  • 向mysql 发送SIGQUITor SIGINT信号 可能会导致双重释放或损坏错误。(漏洞#17297324)glibc

  • RPM Bundle tar文件分发不包括共享兼容性库 RPM。(错误#74611,错误#19909411)

  • postfix在 EL7 上,如果之前使用 yum 安装,从 RPM 包安装 MySQL 可能会失败 。(错误#73507、错误#19392051、错误#19392149)

  • CASCADE DELETE当指定了orCASCADE UPDATE引用约束并且数据库名称或表名称包含特殊字符 时,表的查询缓存未失效 。(错误#72547,错误#18710853)

  • 如果 mysql.user表包含多个具有相同用户名和主机名但主机名的字母大小写不同的帐户, mysql_upgrade可能会失败。这仍然是不允许的,但现在 mysql_upgrade打印了一条信息更丰富的错误消息以指示问题的性质:

    ERROR 1644 (45000): Multiple accounts exist for user_name, host_name
    that differ only in Host lettercase; remove all except one of them

    (错误#72066,错误#18415196)

  • 同一个表上的 同步OPTIMIZE TABLE和联机可能会导致死锁。(错误#71433,错误#18110156)ALTER TABLEInnoDB

  • 如果在语句准备完成后mysql客户端连接丢失,并且至少有一个语句处于初始化状态但尚未准备好,则在 使用准备好的语句时可能会发生无效内存访问。(错误#70429,错误#17512527)

  • 如果通用查询日志或慢速查询日志文件被设置为 FIFO 或套接字文件,并且文件读取器消失,则服务器停止执行语句。现在服务器检测到此类文件,记录一条错误消息,并继续禁用相应的日志。(漏洞 #67088,漏洞 #14757009)

  • LIKEsjiscp932字符集中的 HALF WIDTH KATAKANA 代码点匹配失败。(错误#47641,错误#11755818)