这是一个里程碑版本,使用风险自负。不支持里程碑版本之间的升级(或从里程碑版本升级到 GA 版本)。重大的开发变更发生在里程碑版本中,您可能会遇到兼容性问题,例如除了运行mysql_upgrade的常规过程之外还需要注意的数据格式更改。例如,您可能会发现有必要在升级前使用mysqldump转储数据并 在升级后重新加载。(无论如何,在升级之前进行备份是一种谨慎的预防措施。)
-
Performance Schema 添加了以下内容:
setup_consumers
表格内容已更改 。以前,该表使用 “扁平”结构,消费者名称和目标表之间是一一对应的。这已被消费者设置的层次结构所取代,这些设置可以逐步更好地控制接收事件的目的地。以前的
消费者不再存在。相反,性能模式会自动为启用消费者层次结构中的设置的级别维护适当的摘要。例如,如果仅启用顶级(全局)消费者,则仅维护全局摘要。其他的,例如线程级摘要,则不是。请参阅 按消费者预过滤。此外,还添加了优化以减少 Performance Schema 开销。xxx
_summary_xxx
现在可以使用新
setup_objects
表按对象过滤事件。目前,该表可用于根据模式名称和/或表名称有选择地检测表。请参阅 按对象预过滤。新表objects_summary_global_by_type
汇总了对象的事件。-
现在可以按线程过滤事件,Performance Schema 会为每个线程收集更多信息。新表
setup_actors
可用于根据每个连接会话的用户名和/或主机名有选择地检测用户连接。该threads
表为每个活动的服务器线程包含一行,并用几个新列进行了扩展。添加这些内容后, 中可用的信息threads
类似于INFORMATION_SCHEMA.PROCESSLIST
表中可用的信息或 中的输出SHOW PROCESSLIST
。因此,所有这三个都用于为线程监视目的提供信息。用于threads
在这些方面不同于其他两个线程信息源的使用:访问
threads
不需要互斥量并且对服务器性能的影响最小。INFORMATION_SCHEMA.PROCESSLIST
并且SHOW PROCESSLIST
会产生负面的性能后果,因为它们需要互斥锁。threads
为每个线程提供附加信息,例如它是前台线程还是后台线程,以及与线程关联的服务器中的位置。INSTRUMENTED
您可以通过设置列或使用setup_actors
表格 来控制监视哪些线程。
出于这些原因,执行服务器监控的 DBA
INFORMATION_SCHEMA.PROCESSLIST
或SHOW PROCESSLIST
可能希望改为使用监控threads
。
如果从早期版本升级到此 MySQL 版本,则必须运行mysql_upgrade(并重新启动服务器)以将这些更改合并到
performance_schema
数据库中。有关详细信息,请参阅MySQL 性能架构。
-
不兼容的更改: 以下过时的构造已被删除。在显示备选方案的地方,应更新应用程序以使用它们。
--log
服务器选项和 系统log
变量。相反,使用general_log
系统变量启用通用查询日志,并使用general_log_file
系统变量设置通用查询日志文件名。系统
log_slow_queries
变量。相反,使用slow_query_log
系统变量来启用慢查询日志和slow_query_log_file
系统变量来设置慢查询日志文件名。--one-thread
服务器选项 。改用--thread_handling=no-threads
。--skip-thread-priority
服务器选项 。系统
engine_condition_pushdown
变量。请改用 变量 的engine_condition_pushdown
标志 。optimizer_switch
、
have_csv
、have_innodb
和 系统变量have_ndbcluster
。have_partitioning
改用SHOW ENGINES
。系统
sql_big_tables
变量。改用big_tables
。系统
sql_low_priority_updates
变量。改用low_priority_updates
。系统
sql_max_join_size
变量。改用max_join_size
。和
SLAVE START
语句SLAVE STOP
。请改用START SLAVE
andSTOP SLAVE
语句。语句 的
ONE_SHOT
修饰符 。SET
重要变更;复制: 复制过滤选项,例如
--replicate-do-db
、--replicate-rewrite-db
和--replicate-do-table
在区分大小写方面彼此不一致。现在所有--replicate-*
选项都遵循相同的区分大小写规则,适用于 MySQL 服务器中其他地方的数据库和表的名称,包括lower_case_table_names
系统变量的影响。(错误#51639,错误#11759334)重要变更;Replication:在语句中 添加了
MASTER_RETRY_COUNT
选项 .out 的输出中添加了相应的列。该选项设置此列中显示的值。 旨在最终取代旧的(现在已弃用) 服务器选项,现在是设置从服务器在失去与主服务器的连接后可能尝试重新连接的最大次数的首选方法。(错误#44209、错误#11752887、错误#44486、错误#11753110)CHANGE MASTER TO
Master_Retry_Count
SHOW SLAVE STATUS
MASTER_RETRY_COUNT
--master-retry-count
InnoDB: 设置
innodb_read_ahead_threshold
为0
禁用预读。在 5.6.1 之前,值0
将在读取 64 页范围的边界页时触发预读。(错误#11763876,错误#56646)-
InnoDB: 现在可以报告回滚段
InnoDB
的总大小 ,以页面为单位。 使用计数器 通过表报告该值 。您启用和查询计数器如下:information_schema.innodb_metrics
trx_rseg_current_size
mysql> SET GLOBAL innodb_monitor_enable = 'trx_rseg_current_size'; mysql> SELECT name, count, max_count, comment -> FROM innodb_metrics WHERE name = 'trx_rseg_current_size'; +-----------------------+-------+-----------+----------------------------------------+ | name | count | max_count | comment | +-----------------------+-------+-----------+----------------------------------------+ | trx_rseg_current_size | 346 | 346 | Current rollback segment size in pages | +-----------------------+-------+-----------+----------------------------------------+
(漏洞 #57584)
复制:
SHOW SLAVE STATUS
现在显示 I/O 线程每次连接尝试的实际重试次数。(错误#56416,错误#11763675)复制: 添加了
Slave_last_heartbeat
状态变量,显示复制从站最后一次收到心跳信号的时间。该值使用TIMESTAMP
格式显示。(漏洞 #45441)复制: 时间戳已添加到输出中
SHOW SLAVE STATUS
以显示最近的 I/O 和 SQL 线程错误发生的时间。该Last_IO_Error
列现在以最近的 I/O 错误的时间戳为前缀,并Last_SQL_Error
显示最近的 SQL 线程错误的时间戳。时间戳值使用YYMMDD hh:mm:ss
这两列中的格式。有关详细信息,请参阅 SHOW SLAVE STATUS 语句。(错误#43535、错误#11752361、错误#64255、错误#13726435)现在有一个
bind_address
包含选项值的系统变量--bind-address
。这使该地址能够在运行时访问。(错误#44355,错误#11752999)仅包含表名的“未知表”错误消息现在也包含数据库名。(漏洞 #34750,漏洞 #11747993)
-
以前,如果字符串变得太大
EXPLAIN
,大联合的输出会截断UNION RESULT
列表末尾的行,如下所示:<union1,2,3,4,...>
为了更容易理解联合边界,截断现在发生在字符串的中间:
<union1,2,3,...,9>
(缺陷 #30597,缺陷 #11747073)
-
OpenGIS 规范定义了测试两个几何值之间关系的函数。MySQL 最初实现这些函数时,它们使用对象边界矩形并返回与相应的基于 MBR 的函数相同的结果。现在可以使用使用精确对象形状的相应版本。这些版本以
ST_
前缀命名。例如,Contains()
使用对象边界矩形,而ST_Contains()
使用对象形状。有关详细信息,请参阅 测试几何对象之间空间关系的函数。现在也
ST_
有已经精确的现有空间函数的别名。例如,ST_IsEmpty()
是的别名IsEmpty()
此外,现在实现了
IsSimple()
和ST_Distance()
空间函数,以及集合运算符函数ST_Difference()
,ST_Intersection()
,ST_SymDifference()
, 和ST_Union()
,(Bug #4249,Bug #11744883) -
以下项目已弃用,将在未来的 MySQL 版本中删除。在显示备选方案的地方,应更新应用程序以使用它们。
系统
thread_concurrency
变量。--language
服务器选项 。请改用lc_messages_dir
和lc_messages
系统变量。--master-retry-count
服务器选项 。请改用MASTER_RETRY_COUNT
选项CHANGE MASTER TO
语句。
-
改进了对添加基于 Unicode 归类算法 (UCA) 的 Unicode 归类的支持:
MySQL 现在可以识别用于编写归类描述的 LDML 语法的更大子集。在许多情况下,可以从 Unicode Common Locale Data Repository 下载排序规则定义并将相关部分(即
<rules>
和</rules>
标记之间的部分)粘贴到 MySQLIndex.xml
文件中。LDML 规则中的字符表示更加灵活。任何字符都可以按字面意思书写,而不仅仅是基本的拉丁字母。对于基于 UCA 5.2.0 的排序规则,十六进制表示法可用于任何字符,而不仅仅是 BMP 字符。
当在解析时发现问题时
Index.xml
,会产生更好的诊断。对于需要裁剪规则的排序规则,裁剪信息不再有固定的大小限制。
有关详细信息,请参阅MySQL 中支持的 LDML 语法和 Index.xml 解析期间的诊断。
TO_BASE64()
和FROM_BASE64()
函数现在可用于执行与 base-64 字符串之间的编码。-
Unicode 实现已扩展为包含一个
utf16le
字符集,它对应于 Unicode 字符集的 UTF-16LE 编码。这类似于utf16
(UTF-16) 但它是小端而不是大端。有两种
utf16le
排序规则可用:utf16le_general_ci
: 默认排序规则,区分大小写(类似于utf16_general_ci
)。utf16le_bin
: 区分大小写,按代码点比较,提供与 相同的顺序utf16_bin
。
的使用有一些限制
utf16le
。除了有关用户定义排序规则的项目外,这些与 、 和 的ucs2
限制utf16
相同utf32
。 -
MySQL 5.6 中对复制的更改使 该选项生成的mysqlbinlog输出
--base64-output=ALWAYS
不可用。ALWAYS
现在是此选项的无效值。如果给出的选项没有值,则效果现在与 相同,--base64-output=AUTO
而不是--base64-output=ALWAYS
.参考资料:另请参阅:错误 #28760。
为 Unicode 字符集添加了克罗地亚语归类:
utf8_croatian_ci
、ucs2_croatian_ci
、utf8mb4_croatian_ci
、utf16_croatian_ci
和utf32_croatian_ci
。这些排序规则针对克罗地亚语字母进行了裁剪:Č
,Ć
,Dž
,Đ
,Lj
,Nj
,Š
,Ž
。它们基于 Unicode 4.0。-
对与优化器相关的系统变量进行了一些更改:
系统
optimizer_switch
变量有 newengine_condition_pushdown
和index_condition_pushdown
flags 来控制是否使用存储引擎条件下推和索引条件下推优化。系统engine_condition_pushdown
变量现在已弃用。有关条件下推的信息,请参阅 引擎条件下推优化和索引条件下推优化。optimizer_switch
系统变量有新 的mrr
和mrr_cost_based
标志来控制多范围读取优化的使用。系统optimizer_use_mrr
变量已被删除。有关多范围读取的信息,请参阅 多范围读取优化。系统
join_cache_level
变量已重命名为optimizer_join_cache_level
. 这使单个SHOW VARIABLES LIKE 'optimizer%'
语句能够显示更多与优化器相关的设置。
-
以前仅用于内部连接的块嵌套循环 (BNL) 连接算法已得到扩展,可用于外部连接操作,包括嵌套外部连接。有关详细信息,请参阅阻止嵌套循环和批量密钥访问联接。
结合这项工作,一个新的系统变量
optimizer_join_cache_level
控制连接缓冲的完成方式。 -
--bind-address
许多 MySQL 客户端程序都添加了 一个选项: mysql、mysqldump、 mysqladmin、mysqlbinlog、 mysqlcheck、mysqlimport和mysqlshow。这是用于具有多个网络接口的计算机,使您能够选择使用哪个接口连接到 MySQL 服务器。对 C API 函数进行了相应的更改
mysql_options()
,它现在有一个MYSQL_OPT_BIND
用于指定接口的选项。参数是主机名或 IP 地址(指定为字符串)。
-
不相容的变化;复制:使用基于语句的复制时语句 的行为
INSERT DELAYED
已更改如下:以前在使用 的时候
binlog_format=STATEMENT
,在客户端执行的时候会发出警告INSERT DELAYED
;现在,在这种情况下不会发出警告。以前,在使用时
binlog_format=STATEMENT
,INSERT DELAYED
被记录为INSERT DELAYED
;现在,它被记录为INSERT
,没有DELAYED
选项。但是,当
binlog_format=STATEMENT
,INSERT DELAYED
继续执行为INSERT
(没有DELAYED
选项)。使用 时的行为INSERT DELAYED
保持不变binlog_format=ROW
:INSERT DELAYED
不生成警告,作为 执行INSERT DELAYED
,并使用基于行的格式进行记录。此更改也会影响
binlog_format=MIXED
, 因为INSERT DELAYED
不再被视为不安全。现在,当日志记录格式为 时MIXED
,不会切换到基于行的日志记录。这意味着该语句使用基于语句的日志记录格式作为简单记录INSERT
(即没有DELAYED
选项)。(错误#54579,错误#11762035)参考资料:另请参阅:Bug #56678、Bug #11763907、Bug #57666。此问题是 Bug #39934、Bug #11749859 的回归。
不相容的变化;复制: 在确定是否复制
CREATE DATABASE
、DROP DATABASE
或ALTER DATABASE
语句时,数据库级选项现在优先于任何--replicate-wild-do-table
选项。换句话说,当尝试复制这些语句之一时,--replicate-wild-do-table
当且仅当没有适用于该语句的数据库级选项时,现在才会检查选项。(错误#46110,错误#11754498)-
不兼容的更改:
FLUSH TABLES WITH READ LOCK
当两个或多个连接中不断加载并发 DML 语句时,就会发生语句 饥饿当通过语句打开某个表的HANDLER
连接试图通过 DML 语句更新数据而另一个连接试图FLUSH TABLES WITH READ LOCK
并发执行时,就会发生死锁。这些问题是由全局读锁实现引起的,重新实现后会产生以下后果:
为了解决此补丁暴露的事件处理代码中的死锁问题,
LOCK_event_metadata
互斥体被替换为事件元数据锁。因此,现在禁止对事件进行 DDL 操作LOCK TABLES
。这是一个不兼容的更改。全局读锁 (
FLUSH TABLES WITH READ LOCK
) 不再阻塞临时表上的 DML 和 DDL。在此补丁之前,服务器行为在这方面并不一致:在某些情况下,临时表上的 DML/DDL 语句被阻止;在其他情况下,他们不是。由于主要用例FLUSH TABLES WITH READ LOCK
是各种形式的备份,并且在备份期间不保留临时表,因此服务器现在始终允许在全局读取锁定下对临时表进行 DML/DDL。-
线程状态集已更改:
Waiting for global metadata lock
替换为Waiting for global read lock
.以前,
Waiting for release of readlock
用于指示 DML/DDL 语句正在等待释放读锁,Waiting to get readlock
并用于指示FLUSH TABLES WITH READ LOCK
正在等待获取全局读锁。现在Waiting for global read lock
用于这两种情况。以前,
Waiting for release of readlock
用于导致显式或隐式提交的所有语句,以指示它们正在等待释放读锁Waiting for all running commits to finish
并由FLUSH TABLES WITH READ LOCK
. 现在Waiting for commit lock
用于这两种情况。还有另外两个新状态,
Waiting for trigger metadata lock
和Waiting for event metadata lock
。
(错误#57006、错误#11764195、错误#54673、错误#11762116)
-
不兼容的更改:
CREATE TABLE
声明(包括CREATE TABLE ... LIKE
)现在在LOCK TABLES
声明生效时被禁止。此更改的一个结果是 进行与不只是复制文件
CREATE TABLE ... LIKE
相同的检查 。这意味着如果当前 SQL 模式与创建原始表时有效的模式不同,则表定义可能被认为对新模式无效并且语句将失败。(错误#42546,错误#11751609)CREATE TABLE
.frm
-
创新数据库;复制: 如果 master 有
innodb_file_per_table=OFF
,innodb_file_format=Antelope
(和innodb_strict_mode=OFF
),或两者都有,则忽略CREATE TABLE
选项,例如KEY_BLOCK_SIZE
这可以让主人避免引发ER_TOO_BIG_ROWSIZE
错误。但是,忽略的
CREATE TABLE
选项仍然写入二进制日志,因此,如果从服务器有innodb_file_per_table=ON
和innodb_file_format=Barracuda
,它可能会在执行日志中的记录时遇到ER_TOO_BIG_ROWSIZE
错误,导致从服务器 SQL 线程中止并且复制失败。在 master 运行 MySQL 5.1 而 slave 是 MySQL 5.5(或更高版本)的情况下,当 master 和 slave 都以 和 的默认值运行时会发生
innodb_file_per_table
故障innodb_file_format
。这可能会导致升级过程中出现问题。innodb_file_per_table
为解决此问题,和 的默认值innodb_file_format
分别恢复为 MySQL 5.1 默认值,即OFF
和Antelope
。(错误#56318,错误#11763590) -
InnoDB: 如果 MySQL 服务器在创建表后立即崩溃 在随后的重启期间
InnoDB
退出signal 11
如果服务器在InnoDB
为表创建主索引之后但在索引定义被记录在 MySQL 元数据中之前停止,则可能会出现此问题。(漏洞 #57616)参考资料:这个问题是 Bug #54582 的回归。
InnoDB: 启用二进制日志记录后,
InnoDB
可能会在崩溃恢复期间停止,并显示一条消息引用事务 ID 0。(错误#54901,错误#11762323)-
复制: 由于 MySQL 5.5.3 中所做的更改,在
binlog_cache_size
和max_binlog_cache_size
服务器系统变量中所做的设置会影响二进制日志语句缓存(也在该版本中引入)和二进制日志事务缓存(以前简称为二进制日志缓存) . 这意味着由于设置其中一个或两个变量而使用的资源是预期数量的两倍。为了纠正这个问题,这些变量现在只影响事务缓存。此问题的修复还引入了两个新的系统变量binlog_stmt_cache_size
和max_binlog_stmt_cache_size
,它们仅影响二进制日志语句缓存。此外,
Binlog_cache_use
每当使用任一缓存时状态变量都会递增,并且每当使用任一缓存中Binlog_cache_disk_use
的磁盘空间时都会递增,这会导致语句和事务缓存的性能调整出现问题,因为无法确定其中的哪一个在尝试解决过多的磁盘寻道和相关问题时被超过了。这个问题通过改变这两个状态变量的行为来解决,使它们仅在响应二进制日志事务缓存的使用时增加,以及通过引入两个新的状态变量Binlog_stmt_cache_use
和Binlog_stmt_cache_disk_use
,它们仅通过使用二进制日志语句缓存来增加。系统变量关于活动会话的行为
max_binlog_cache_size
也已更改以匹配binlog_cache_size
系统变量的行为:以前,更改max_binlog_cache_size
在现有会话中生效;现在,与 中的更改一样binlog_cache_size
,中的更改max_binlog_cache_size
仅在值更改后开始的会话中生效。有关详细信息,请参阅 与二进制日志记录一起使用的系统变量和 服务器状态变量。(错误#57275,错误#11764443)
-
复制:
Binlog_cache_use
和 而Binlog_cache_disk_use status
递增两次。(错误#56343,错误#11763611)参考:这个问题是 Bug #50038 的回归。
-
复制:发出 时
STOP SLAVE
,如果事务仅更新使用事务存储引擎的表,则从 SQL 线程回滚当前事务并立即停止。以前,即使事务包含CREATE TEMPORARY TABLE
语句、DROP TEMPORARY TABLE
语句或两者,也会发生这种情况,尽管这些语句无法回滚。因为临时表在用户会话(在本例中为复制用户)的生命周期内持续存在,所以它们会一直存在,直到从站停止或重置。当交易在后续交易重新开始时START SLAVE
语句,SQL 线程中止并显示要创建(或删除)的临时表已经存在(或不存在,在后一种情况下)的错误。在此修复之后,如果正在进行的事务包含
CREATE TEMPORARY TABLE
语句、DROP TEMPORARY TABLE
语句或两者,则 SQL 线程现在会等待事务结束,然后停止。(错误#56118,错误#11763416) -
复制: 当为新的二进制日志文件生成名称时发生错误,错误会被记录下来但不会显示给用户。(漏洞 #46166)
参考资料:另请参阅:Bug #37148、Bug #11748696、Bug #40611、Bug #11750196、Bug #43929、Bug #51019。
-
Replication: 当
lower_case_table_names
在slave上设置为1,但在master上没有设置时,复制语句中的数据库名称不会被转换,导致复制在使用区分大小写的文件系统的slave上失败。这发生在基于语句和基于行的复制中。此外,当
lower_case_table_names
仅在从站上使用设置为 1 的基于行的复制时,表的名称也不会转换,也会导致使用区分大小写的文件系统的从站复制失败。(漏洞 #37656) 设置
collation_connection
为ucs2
或utf16
字符集的排序规则之一后,此后无法更改排序规则。(缺陷 #65000,缺陷 #13970475)-DBUILD_CONFIG=mysql_release
Linux 上的cmakelibaio
以前需要链接进来。现在可以指定-DIGNORE_AIO_CHECK
不使用libaio
. (缺陷 #58955,缺陷 #11765940)fn_format
从 调用时 发生 Valgrind 故障archive_discover
。(缺陷 #58205,缺陷 #11765259)将未以空值终止的字符串传递给
UpdateXML()
或ExtractValue()
导致服务器因断言而失败。(错误#57279,错误#11764447)在引导程序模式下,服务器无法执行超过 10,000 个字符的语句。(错误#55817,错误#11763139)
NULL
对于某些包含GROUP BY
. (错误#45267,错误#11753766)如果
HAVING
索引可用,子句可能会丢失ORDER BY
,从而错误地允许返回其他行。(缺陷 #45227,缺陷 #11753730)优化器可能会低估连接处理期间列描述符所需的内存,并导致内存损坏或服务器崩溃。(错误#42744,错误#11751763)
服务器针对 表的
WHERE ... OR ... GROUP BY
查询返回了不正确的结果。InnoDB
(缺陷 #37977,缺陷 #11749031)错误检查的
XOR
子查询优化导致断言失败。(错误#37899,错误#11748998)一个查询可以使用一个索引来生成所需的排序,而另一个索引用于通过索引条件下推进行范围访问可能会导致服务器崩溃。(漏洞 #37851,漏洞 #11748981)
启用索引条件下推后,
InnoDB
可能会由于记录中预期的下推代码与实际存在的代码不匹配而崩溃。(错误#36981,错误#11748647)范围优化器忽略了半连接子查询中内表的条件
IN
,导致优化器错过了良好的查询执行计划。(错误#35674,错误#11748263)依赖子查询和连接可能会导致服务器崩溃或内存溢出。(错误#34799,错误#11748009)
FROM
从子句和子句 中引用同一个表的视图中进行选择会IN
导致服务器崩溃。(漏洞 #33245)深度嵌套的子查询可能会导致堆栈溢出或服务器崩溃。(漏洞 #32680,漏洞 #11747503)
DECIMAL
服务器在优化将索引列与字符串值 进行比较的查询时崩溃。(缺陷 #32262,缺陷 #11747426)服务器因使用
range checked for each record
访问方法的优化而崩溃。(缺陷 #32229,缺陷 #11747417)Contains()
多面体几何失败。(缺陷 #32032,缺陷 #11747370)如果优化器使用多范围读取访问方法进行索引查找,则包含任何
BLOB
或TEXT
数据类型的行可能会出现不正确的结果。(缺陷 #30622,缺陷 #11747076)与 MySQL 5.1 相比,优化器无法对某些查询使用连接缓冲,导致这些查询的性能降低。(缺陷 #30363,缺陷 #11747028)
对于用于解决
LIMIT
查询的多范围读取扫描,无法关闭扫描会导致表的文件描述符泄漏MyISAM
。(缺陷 #30221,缺陷 #11746994)SHOW CREATE DATABASE
没有考虑lower_case_table_names
系统变量的值。(缺陷 #21317,缺陷 #11745926)