MySQL 8.0版本说明/ MySQL 8.0.3的更改(2017-09-21,发布候选版本)

MySQL 8.0.3的更改(2017-09-21,发布候选版本)

有关升级、降级、平台支持等的一般信息,请访问https://dev.10bet靠谱mysql.com/doc/relnotes/mysql/8.0/en/

请注意

这是一个里程碑版本,使用风险自负。不支持里程碑版本之间(或从里程碑版本到GA版本)的升级。重要的开发更改发生在里程碑版本中,您可能会遇到兼容性问题,例如除了通常的运行过程外还需要注意的数据格式更改mysql_upgrade.例如,您可能发现有必要将数据转储到, mysqldump在升级之前重新加载它。(在任何情况下,升级前进行备份都是一种谨慎的预防措施。)

账户管理笔记

  • 创建用户现在允许默认角色子句用于指定帐户默认角色。

    显示创建用户现在,如果没有默认设置,则显示帐户默认角色没有一个.(Bug #24670738, Bug #82987)

  • MySQL现在维护有关密码历史的信息,这使得允许对重用以前的密码进行限制成为可能。在一定次数的密码更改或一段时间内,dba可以要求不从以前的密码中选择新密码。方法可以全局地建立密码重用策略password_history而且password_reuse_interval系统变量,以及在每个帐户的基础上使用创建用户而且改变用户语句。加上现有的密码过期功能(要求定期更改密码),新的重用限制功能为dba提供了对密码管理更完整的控制。有关更多信息,请参见密码管理

    重要的

    的结构进行更改,才能实现密码重用限制mysql.user系统表和一个新的mysql.password_history系统表。如果您从较早的版本升级到这个MySQL版本,您必须运行mysql_upgrade(并重新启动服务器)以合并这些系统数据库更改。在这之前无法更改密码。

原子DDL笔记

  • MySQL现在支持原子数据定义语句(原子DDL).原子DDL语句将数据字典更新、存储引擎操作和与DDL操作相关联的二进制日志写入到一个独立的、崩溃安全的事务中,该事务可以完全提交或回滚。

    表和非表DDL语句都受支持。与表相关的DDL操作需要存储引擎支持,而非表DDL操作不需要。目前,InnoDB存储引擎支持原子DDL。

    • 支持的表DDL语句包括创建改变,下降用于数据库、表空间、表和索引的语句截断表声明。

    • 支持的非表DDL语句包括:

      • 创建而且下降声明,以及,如果适用,改变存储程序、触发器、视图和用户定义函数(udf)的语句。的原子DDL支持创建触发器而且下降触发在MySQL 8.0.0中添加。

      • 账户管理报表:创建改变下降,如果适用,重命名用于用户和角色的语句,以及格兰特而且撤销语句。在MySQL 8.0.1中添加了帐户管理语句的原子DDL支持。

    对于表相关的DDL操作,InnoDB将DDL日志写入mysql.innodb_ddl_log数据字典表。使innodb_print_ddl_logs配置选项将DDL恢复日志打印到stderr

    原子DDL特性改变了一些语句的行为:

    • 删除视图如果命名视图不存在,且不做任何更改,则失败并报错。在此之前,该语句返回一个错误,指示哪些视图不存在,但也删除了存在的视图。

    • 删除表如果命名表不存在,且不做任何更改,则失败并报错。在此之前,该语句返回一个错误,指示哪些表不存在,但也删除了存在的表。

    • 删除表是完全原子的,如果所有命名表都使用原子的ddl支持的存储引擎。

    • 删除数据库是原子的,如果所有表都使用原子的ddl支持的存储引擎。但是,从文件系统中删除数据库目录发生在最后,并且不是原子事务的一部分。如果由于文件系统错误或服务器停止而导致数据库目录删除失败,则删除数据库事务没有回滚。

    • 对使用原子DDL支持的存储引擎的表的中断DDL操作不再在存储引擎、数据字典和二进制日志之间引入差异,或留下孤儿文件。

    • 不再允许部分执行帐户管理报表。帐户管理语句对于所有指定的用户都是成功的,或者是回滚,如果发生错误则不生效。

    更改删除表删除视图,帐户管理语句行为对跨版本复制配置有影响。

    有关更多信息,请参见原子数据定义语句支持.(错误# 24620918)

C API的笔记

  • MySQL C API现在允许客户端指定结果集的元数据传输是可选的。抑制元数据传输可以提高性能,特别是对于执行许多查询但每次返回的行数很少的会话。有关更多信息,请参见可选结果集元数据

字符集的支持

  • MySQL现在支持俄文排序utf8mb4Unicode字符集:

    • utf8mb4_ru_0900_ai_ci不区分重音和大小写。

    • utf8mb4_ru_0900_as_cs区分重音和大小写。

编译的笔记

  • 对于调试版本,SAFE_MUTEX编译标志被禁用memcached插件包含在构建中。这种情况不再发生;SAFE_MUTEX始终为调试版本启用。由于此更改而发现的一些代码问题已得到纠正。(Bug #26442367, Bug #87068)

  • EL6和EL7上的二进制包现在使用Devtoolset 6而不是Devtoolset3编译,使用GCC 6.2.1而不是4.9.2编译。(Bug #26436968, Bug #87061)

  • MySQL现在为Oracle Linux上的SPARC编译。(Bug #26306331, Bug #86745)

  • 在macOS上使用Clang编译MySQL现在需要一个不同于8.0的Clang版本,该版本在某些内联构造方面存在问题。(Bug #26279510, Bug #86711)

  • 清理源代码库的工作已经完成,包括:删除不需要的CMake检查;从源文件中删除未使用的宏;重新组织头文件以减少依赖的数量并使它们更加模块化,删除没有定义的函数声明,用行业标准库中的等价函数替换本地编写的函数。

配置说明

数据字典的笔记

  • 这些INFORMATION_SCHEMA表被重新实现为数据字典表的视图:

    文件分区REFERENTIAL_CONSTRAINTS

    对这些表的查询现在效率更高,因为它们从数据字典表获得信息,而不是通过其他较慢的方法。例如,服务器不再必须为的每个查询创建临时表INFORMATION_SCHEMA表格

    如果您从较早的版本升级到这个MySQL版本,您必须运行mysql_upgrade(并重新启动服务器)来合并这些更改。

弃用和删除说明

InnoDB的笔记

  • 由于正在进行外键锁定的工作,父外键中的列的重命名将暂时禁用。这个限制将在MySQL 8.0.4中被取消。(错误# 26334071)

    参考文献:参见Bug #26659110。

日志记录笔记

  • 现在在服务器启动时默认启用二进制日志。的log_bin系统变量默认设置为ON,而不是OFF,即使——log-bin选项未指定。二进制日志记录是生产安装的标准实践,因此在默认情况下启用它可以省去通常需要的配置和规划步骤。

    要禁用二进制日志记录,可以指定——skip-log-bin——disable-log-bin在启动时选项。

    server_id系统变量现在默认设置为1,而不是0。对于复制拓扑中的服务器,您仍然必须更改此设置,以为每个复制服务器指定惟一的服务器ID。以前,服务器无法启动log_bin =对如果没有指定服务器ID。现在,服务器可以启动了,但是如果没有设置显式的服务器ID,则会发出警告消息。(从MySQL 8.0.4,该消息只是信息。)

    在为服务器启用二进制日志记录后,所有更改数据的语句都会被记录到服务器的二进制日志中,这是一个具有基本名称和数字扩展名的文件序列。默认情况下,服务器在data目录中创建二进制日志文件和索引文件。在MySQL 8.0.3中,这些文件的默认基名是host_name,使用主机的名称。从MySQL 8.0.4开始,默认的基名是binlog如果您不提供——log-bin选择,host_name如果您提供的选项没有字符串或空字符串。

    属性,可以选择二进制日志文件和索引文件的名称和位置——log-bin而且——log-bin-index选项。建议显式指定基名,以便在主机名更改时,可以轻松地继续使用相同的二进制日志文件名。的log_bin_basename系统变量保存二进制日志文件的基本名称和任何指定路径。

    复制从机上的中继日志和中继日志索引,其名称由——relay-log而且——relay-log-index选项,不能给与二进制日志和二进制日志索引相同的名称。在MySQL 8.0.3中,如果二进制日志和中继日志文件基文件名相同,服务器就会发出错误消息,并且不启动。

    每次启动或刷新日志时,服务器都会在该系列中创建一个新的二进制日志文件。服务器还会在当前文件的大小达到后自动创建一个新的二进制日志文件max_binlog_size,默认为1GB的最大值。在MySQL 8.0.3中,二进制日志文件默认在30天后过期,然后可以在启动时或二进制日志刷新时自动删除。方法手动清除二进制日志文件清洗二进制日志方法指定不同的二进制日志过期时间binlog_expire_logs_seconds系统变量。

    还有许多其他选项可用于修改二进制日志记录的行为。有关更多信息,请参见二进制日志而且二进制日志选项和变量

    参考文献:参见Bug #26730000。

优化器的笔记

  • 优化器现在支持SET_VAR在单个语句的持续时间内设置系统变量的会话值的提示。例子:

    SELECT /*+ SET_VAR(sort_buffer_size = 16M) */ name FROM peopleINSERT /*+ SET_VAR(foreign_key_checks=OFF) */ INTO t2 VALUES(2);

    有关更多信息,请参见优化器提示.(错误# 22906815)

  • 对象中存储的列值直方图统计信息column_statistics数据字典表构造查询执行计划。直方图的使用适用于将列与常量进行比较的谓词。看到优化器统计数据

  • 以前,没有办法跳过使用索引跳水来估计索引的有用性,除非使用eq_range_index_dive_limit系统变量。现在,对于某些查询条件下的单表查询(参见优化范围).

  • optimizer_switch系统变量有一个名为use_invisible_indexes控制优化器是否为查询执行计划构造使用不可见索引。如果标志是(默认值),优化器会忽略不可见的索引(与引入此标志之前的行为相同)。如果标志是,不可见索引保持不可见,但优化器会在构建执行计划时考虑到它们。

包装的笔记

  • mysqlcheck在MySQL Server Docker映像中缺失,这阻止了mysql_upgrade从运行。(Bug #26400146, Bug #86968)

  • 对于Debian,非调试二进制文件从mysql服务器包的mysql-server-core包中。(Bug #26382333, Bug #86899)

  • Debian / Ubuntumysql-community-source包不再生成,因为它包含的MySQL源tarball是由其他包提供的dev.10bet靠谱mysql.com.(错误# 26201482)

  • 与MySQL绑定的zlib库已从1.2.3版本升级到1.2.11版本。MySQL在zlib库的帮助下实现压缩。

    zlibcompressBound ()函数在zlib 1.2.11中返回的压缩给定字节长度所需缓冲区大小的估计值比在zlib 1.2.3中略高。的compressBound ()函数由InnoDB确定在创建压缩时允许的最大行大小的函数InnoDB表或在压缩中插入和更新行InnoDB表。作为一个结果,创建表……ROW_FORMAT =压缩插入,更新在早期版本中,行大小非常接近最大行大小的操作现在可能会失败。要避免这个问题,请进行测试创建表语句压缩InnoDB在升级之前在MySQL 8.0测试实例上安装一个具有大行的表。

性能模式笔记

  • 从MySQL 8.0.2开始,性能模式表定义在服务器内部维护。由于这种变化,创建表而且删除表不再适用于性能模式表。(错误# 26136994)

  • events_statements_summary_by_digest表现在为每一行提供了一个示例语句,该语句生成行中的摘要值。应用程序可以使用此信息作为捕获语句样例的更有效的方法,而不是探测xxx_history_long表。后一种方法需要启用相应的xxx_history_long对于不需要这些表的应用程序来说,这是额外的开销。有关更多信息,请参见性能模式语句摘要和抽样,声明汇总表

    此外,FIRST_SEEN而且LAST_SEEN的时间戳列events_statements_summary_by_digest表现在有小数秒部分。

  • 性能模式setup_instruments表现在有仪器元数据列:仪器属性、仪器波动率和描述仪器用途的文档字符串。10bet官方网站此外,定时列现在可以是,表示该仪器不支持计时。看到setup_instruments表

    新的性能模式setup_threads表公开了仪表化的线程类名称和属性。看到setup_threads表

插件的笔记

  • get_sysvar_source插件服务允许插件检索系统变量设置的源。

    请注意

    作为这项工作的一部分,用于引用多个的复合部分结构化变量语法MyISAM密钥缓存已弃用。看到多个键缓存

安全记录

  • 一个新的caching_sha2_password认证插件可用。就像sha256_password插件,caching_sha2_password实现SHA-256密码哈希,但使用缓存解决连接时的延迟问题。它还支持更多的连接协议,并且不需要连接到OpenSSL以获得RSA密码交换功能。看到缓存SHA-2可插入认证

  • 因为启动服务器时——skip-grant-tables禁用身份验证检查,在这种情况下,服务器也通过启用禁用远程连接skip_networking

服务器管理

  • MySQL现在支持创建和管理资源组,并允许将服务器中运行的线程分配给特定的组,以便根据组中可用的资源执行线程。组属性允许对其资源进行控制,以启用或限制组中的线程使用资源。dba可以根据不同的工作负载适当地修改这些属性。目前,CPU时间是一种可管理的资源,用的概念表示虚拟CPU作为一个术语,它包括CPU内核、超线程、硬件线程等等。服务器在启动时确定有多少虚拟cpu可用,具有适当权限的数据库管理员可以将这些cpu与资源组关联,并为组分配线程。有关更多信息,请参见资源组

空间数据的支持

SQL语法笔记

  • ALTER TABLE现在支持使用更容易的列重命名重命名列old_namenew_name语法。看到ALTER TABLE语句.对于更改列名而不更改其定义,重命名列改变,这需要重新指定当前列定义。与改变,如果你不知道它的定义,你必须查找它,如果你不准确地重新指定它,有可能数据更改或丢失。(Bug #11746522, Bug #26949, Bug #11747473, Bug #32497, Bug #11765084, Bug #58006, Bug #14031617)

X插件笔记

  • 文件启动服务器时,无法安装X Plugin——skip-grant-tables选择。(错误# 26516678)

  • X插件套接字连接没有正常工作。(Bug #26427112, Bug #87019)

  • 从源代码编译MySQL时,某些不常使用CMake参数导致了X Plugin构建的问题。(错误# 26141933)

  • 一个Mysqlx.Connection.CapabilitiesGet使用X协议的请求没有返回可用身份验证机制的完整列表。(错误# 26044113)

  • 对于混合大小写或大写模式名,语句list_objects可能错误地将集合报告为表。(错误# 25769683)

  • 用于测试数据目录权限的插件列表中省略了X Plugin。(错误# 24823999)

增加或更改的功能

  • InnoDB:innodb_dedicated_server配置选项,该选项在默认情况下是禁用的,可用于拥有InnoDB根据服务器上检测到的内存量,自动配置以下选项:

    该选项适用于在专用服务器上运行的MySQL服务器实例。有关更多信息,请参见启用MySQL专用服务器的自动配置

  • InnoDB:现在支持重命名通用表空间改变表空间……重命名为语法。

    修改表空间而且删除表空间引擎子句已弃用,将在未来的MySQL版本中删除。

  • InnoDB:与过时相关的代码InnoDB系统表被删除。INFORMATION_SCHEMA的观点的基础上InnoDB系统表被数据字典表上的内部系统视图所取代。影响InnoDBINFORMATION_SCHEMA观点被更名为:

    表1重命名的InnoDB Information Schema视图。第一列显示旧名称。第二列显示了新名称。

    旧的名称 新名字
    INNODB_SYS_COLUMNS INNODB_COLUMNS
    INNODB_SYS_DATAFILES INNODB_DATAFILES
    INNODB_SYS_FIELDS INNODB_FIELDS
    INNODB_SYS_FOREIGN INNODB_FOREIGN
    INNODB_SYS_FOREIGN_COLS INNODB_FOREIGN_COLS
    INNODB_SYS_INDEXES INNODB_INDEXES
    INNODB_SYS_TABLES INNODB_TABLES
    INNODB_SYS_TABLESPACES INNODB_TABLESPACES
    INNODB_SYS_TABLESTATS INNODB_TABLESTATS
    INNODB_SYS_VIRTUAL INNODB_VIRTUAL

    升级到MySQL 8.0.3或更高版本后,更新引用前面的任何脚本InnoDBINFORMATION_SCHEMA视图名称。

    INFORMATION_SCHEMA。INNODB_TABLESPACES_BRIEF视图提供空间、名称、路径、标志和空间类型数据InnoDB表空间。

  • InnoDB:InnoDB与全局数据字典集成,数据字典中的file-per-table表空间名称以innodb_file_per_table_x,在那里xInnoDB表空间ID。为了方便使用,数据字典中的每表文件表空间名称再次与表名称相同。

    从MySQL 5.7升级到MySQL 8.0会附加MySQL 5.7innodb_table_stats而且innodb_index_stats数据字典中的表空间名称_backup57以区别于MySQL 8.0版本。

  • InnoDB:默认的innodb_autoinc_lock_mode设置从1(连续)更改为2(交错)。交错锁定模式允许并行执行多行插入,这提高了并发性和可伸缩性。新innodb_autoinc_lock_mode默认设置反映了MySQL 5.7中的默认复制类型从基于语句的复制变为基于行的复制。基于语句的复制需要连续的自动增量锁定模式,以确保对给定的SQL语句序列以可预测和可重复的顺序分配自动增量值,而基于行的复制对SQL语句的执行顺序不敏感。有关更多信息,请参见InnoDB AUTO_INCREMENT锁模式

    对于使用基于语句的复制的系统,新的innodb_autoinc_lock_mode默认设置可能会破坏依赖顺序自动递增值的应用程序。要恢复以前的默认设置,请设置innodb_autoinc_lock_mode为1。

  • InnoDB:序列化字典信息(SDI)现在出现在所有文件中InnoDB临时表空间和撤销表空间文件除外的表空间文件。SDI是表和表空间对象的序列化元数据。SDI数据的存在提供了元数据冗余。例如,如果数据字典变得不可用,可以从表空间文件中提取字典对象元数据。方法执行SDI提取ibd2sdi工具。SDI数据存储在JSON格式。

    在表空间文件中包含SDI数据会增加表空间文件的大小。一个SDI记录需要一个索引页,默认情况下大小为16KB。但是,SDI数据在存储时进行压缩,以减少存储空间占用。

  • InnoDB:innodb_flush_neighbors默认值已从1更改为0,这将禁止从缓冲池刷新相邻页。对于寻道时间不是重要因素的非旋转存储(SSD)设备,设置为0是最优的。对于使用HDD的系统,建议恢复默认值“1”。

  • InnoDB:影响缓冲池预冲洗和冲洗行为的配置选项的默认值已被修改:

    • innodb_max_dirty_pages_pct_lwm默认值修改为10。前面的默认值0禁用缓冲池预刷新。当缓冲池中脏页的百分比超过10%时,值10启用预刷新。启用预冲功能可以提高性能一致性。

    • innodb_max_dirty_pages_pct默认值由75修改为90。InnoDB尝试从缓冲池刷新数据,以使脏页的百分比不超过此值。增加的默认值允许缓冲池中更大比例的脏页。

  • InnoDB:最低innodb_undo_tablespaces值从0更改为2。在以前的版本中,如果回滚段使用系统表空间innodb_undo_tablespaces设置为0。最小值为2可以确保回滚段是在undo表空间而不是system表空间中创建的。有关更多信息,请参见撤消表空间

  • 复制;JSON:添加了binlog_row_value_options系统变量。目前该变量可以取消设置,也可以设置为该值PARTIAL_JSON.这导致MySQL的基于行复制对每次更新使用紧凑的二进制日志格式,只修改JSON文档的一小部分,并使用任意组合JSON_SET ()JSON_REPLACE (),JSON_REMOVE ().紧凑格式只包含用于二进制日志中更新的后图像中JSON文档的修改部分,而不是完整的文档。如果修改需要比完整文档更多的空间,或者无法生成部分更新,则使用完整文档代替。

    参见对变量的描述JSON值的部分更新,以查询更多资料。

  • 复制:IGNORE_SERVER_IDS选择的改变主语句在使用基于gtid的复制(gtid_mode =对).对于gtid,已经应用的事务将被自动忽略,因此不需要此函数。

    在启动基于gtid的复制之前,请检查并清除之前在相关服务器上设置的所有被忽略的服务器ID列表。的SHOW_SLAVE_STATUS语句,该语句可以针对单个通道发出,如果存在被忽略的服务器id,则显示该列表。如果没有列表,则Replicate_Ignore_Server_Ids字段是空白。

    如果gtid_mode =对为服务器设置时,如果包含IGNORE_SERVER_IDS选择在一个改变主声明。如果您发出一个设置GTID_MODE =语句时,任何通道都设置了现有的服务器idIGNORE_SERVER_IDS.如果您确实收到了弃用警告,您仍然可以在之后清除列表gtid_mode =对是通过发行改变主声明中包含IGNORE_SERVER_IDS选项,该选项带有一个空列表。

  • 复制:下面的过时的mysqlbinlog选项现在已弃用,并将在未来的MySQL版本中删除:

    • ——短小精悍,它可以用于将输出限制为语句单独的测试。

    • ——stop-never-slave-server-id的连接提供一个服务器ID——stop-never选择。如果需要此函数,请使用——connection-server-id选项。

    这些选项的弃用警告被发送到标准错误,而不是标准输出,以便它们不会干扰使用的输出的工具的操作mysqlbinlog

  • 复制:log_slave_updates系统变量现在默认设置为ON,因此不需要指定——log-slave-updates在启动复制从端时显式。

    log_slave_updates系统变量只读。如果需要防止复制从将其SQL线程执行的更新记录到其自己的二进制日志中,请指定——log-slave-updates =了从服务器启动时。

  • 复制:group_replication_communication_debug_options变量已添加,它使您能够根据Group Replication组件(如GCS、XCOM等)动态过滤掉调试和跟踪消息。

  • 复制:组复制线程状态现在显示在性能模式表中。

  • JSON:JSON_MERGE ()函数被重命名为JSON_MERGE_PRESERVE ()

    该版本还添加了JSON_MERGE_PATCH ()功能,是RFC 7396兼容的版本JSON_MERGE_PRESERVE ();它的行为与JSON_MERGE_PRESERVE (),但有以下两个例外:

    • JSON_MERGE_PATCH ()移除第一个对象中与第二个对象中的键相匹配的任何成员,前提是与第二个对象中的键相关联的值不是JSON

    • 如果第二个对象的成员键与第一个对象的成员相匹配,JSON_MERGE_PATCH ()替换第一个对象中的值与第二个对象中的值相匹配,而JSON_MERGE_PRESERVE ()附加第二个值到第一个值。

    这个例子比较合并相同的3个JSON对象的结果,每个对象都有一个匹配的键“一个”,具有以下每一个功能:

    mysql >设置@x = '{“a”:1、“b”:2}’,> @y = "{“a”:3,“c”:4}’,> @z = "{“d”:“一”:5日6}';mysql >选择JSON_MERGE_PATCH (@x、@y @z)作为补丁,——> JSON_MERGE_PRESERVE (@x, @y @z)保存\ G  *************************** 1。行  *************************** 补丁:{“b”,“a”:5:2,“c”:4,“d”:6}保护:{“a”:1、3、5,“b”:2,“c”:4,“d”:6}

    JSON_MERGE ()仍然支持作为JSON_MERGE_PRESERVE (),但现在已弃用,并将在未来的MySQL版本中删除。

    看到修改JSON值的函数,以查询更多资料。(Bug #81283, Bug #23255346)

  • InnoDB现在使用方差感知事务调度(VATS)在系统高负载时调度事务锁的释放,这有助于减少锁系统等待互斥锁的争用。当锁等待队列中挂起了>= 32个线程时,锁调度使用VATS。

    有关VATS的更多信息,请参见识别事务延迟的主要差异来源:向更可预测的数据库发展

    感谢黄佳敏的贡献。(Bug #25290971, Bug #84266)

  • MySQL现在根据需要将元数据锁扩展到由外键约束相关的表。扩展元数据锁可以防止冲突的DML和DDL操作在相关表上并发执行。该特性还支持在修改父表时更新外键元数据。以前,由子表拥有的外键元数据无法安全更新。

    如果表显式锁定锁表,任何与外键约束相关的表现在都是隐式打开和锁定的。对于外键检查,共享只读锁(锁表读)在相关表上。对于级联更新,无共享写锁(锁表写)被取到与操作相关的表上。

    如果锁表对于外键关系中的表是活动的,ALTER TABLE……重命名不允许在那张桌子上使用。这是一个临时限制,在MySQL 8.0.4中通过Bug #26647340的补丁解除。

  • expire_logs_dayssystem变量,它指定二进制日志过期时间(以天为单位),现在已弃用,并将在未来的MySQL版本中删除。expire_logs_days没有为定义二进制日志过期时间提供足够的灵活性。

    binlog_expire_logs_seconds可用于以秒为单位设置二进制日志过期时间。在MySQL 8.0.3中,这两个变量的影响目前是累积的。例如,如果expire_logs_days是1,binlog_expire_logs_seconds为43200,则每1.5天清除一次二进制日志。这将产生与设置相同的结果binlog_expire_logs_seconds到129600年,expire_logs_days为0。注意,默认的expire_logs_days当前将30天设置添加到二进制日志过期时间中,如果expire_logs_days没有指定。使用binlog_expire_logs_seconds独自一人,expire_logs_days = 0明确。

    要禁用二进制日志的自动清除,必须同时设置两者expire_logs_days而且binlog_expire_logs_seconds显式地为0。

    参考文献:参见Bug #26483363。

  • 一种新的备份锁类型允许在在线备份期间使用DML,同时防止可能导致快照不一致的操作。支持新的备份锁为备份锁定实例而且打开实例语法。的BACKUP_ADMIN使用这些语句需要特权。

  • 在MySQL 8.0.2中,slave状态日志的系统变量,master_info_repository而且relay_log_info_repository,被设定为表格而不是文件默认情况下。在MySQL 8.0.3中,文件已弃用这两个系统变量的设置,如果使用该设置,则会发出警告。的文件设置将在未来的MySQL版本中删除。

    表格设置确保复制库信息存储在InnoDB表中,而不是数据目录下的文件中。表的使用使复制对意外停止具有弹性。

    存储为文件时,从属状态日志的默认名称为master.info而且relay-log.info.方法可以更改名称——master-info-file而且——relay-log-info-file选项,分别。和InnoDB表一样,slave状态日志被命名mysql.slave_master_info而且mysql.slave_relay_log_info

    修改正在使用文件要使用的从状态日志的存储库表格通过运行以下命令,动态转换现有的复制存储库:

    停止奴隶;SET GLOBAL master_info_repository = 'TABLE';SET GLOBAL relay_log_info_repository = 'TABLE';

    主信息日志表mysql.slave_master_info应该受到保护,因为它包含连接到主服务器的密码。在备份复制从端数据时,请确保已备份mysql.slave_master_info而且mysql.slave_relay_log_info包含slave状态日志的表,因为在从slave恢复数据后,需要这些表来恢复复制。

错误修复

  • 不兼容的更改;JSON:如果一个JSON对象包含多个具有相同键名的成员,MySQL将保留第一个成员并丢弃其余成员。这与RFC 7159相矛盾,RFC 7159认为重复的键名可以用下面列出的方法之一来处理:

    • 报告错误(或无法解析对象)

    • 报告所有名称-值对,包括重复项

    • 只报告最后一个名称-值对

    当用JavaScript计算JSON文本时,如果指定了多个具有相同名称的对,则保留最后一个名称-值对。MySQL现在也这样做了,并实现了刚才列出的三个选项中的最后一个,如下所示:

    CREATE TABLE t1 (c1 JSON);mysql >插入t1值(“{“x”:17,“x”:“红色”,“x”:[3、5、7]}”);SELECT c1 FROM t1;+------------------+ | c1  | +------------------+ | {" x”:[3、5、7 ]} | +------------------+

    这个问题的修复还纠正了MySQL 8.0服务器在处理将数据插入到包含JSON数组作为多个相同键值的JSON列中的失败。(Bug #86620, Bug #86866, Bug #26238736, Bug #26369555)

  • 性能;JSON:创建JSON字符串的表示现在针对最常见的情况进行了优化——要处理的字符串不包含需要转义的特殊字符——扫描字符串中的第一个特殊字符,并复制不需要单独转义的每个字符序列memcpy ()调用,而不是依次检查每个字符以确定它是否需要转义,如果需要则转义,然后逐个复制它,就像前面所做的那样。

    此修复程序还纠正了未能转义控制字符的错误\ u001f,或单位分隔符。(Bug #86898, Bug #26388690, Bug #87722, Bug #26780307)

    参考文献:参见Bug #25977595。

  • InnoDB:的默认值。在更新而且在删除外键子句更改为限制不采取行动不采取行动是一个标准的SQL关键字,相当于限制关键字在MySQL中。(Bug #30186407, Bug #96466)

  • InnoDB:的外键记录丢失INFORMATION_SCHEMA。INNODB_SYS_FOREIGN表由于内部父表和子表名称的文件名编码,导致名称超过允许的长度。(错误# 27020089)

  • InnoDB:执行时发生了长时间的信号量等待ALTER TABLE删除表,删除数据库操作。(错误# 26779650)

  • InnoDB:从与表空间导入相关的函数中删除了无效的错误处理代码。(错误# 26595476)

  • InnoDB:在升级到MySQL 8.0.2时,在MySQL 5.6之前创建的每表文件表空间导致了失败。的表空间没有注册InnoDBSYS_TABLESPACES系统表,根据需要。

    在升级到MySQL 8.0.2时,由于精度类型不匹配,在MySQL 5.5之前创建的具有十进制列的表也会导致失败。(Bug #26542296, Bug #87229)

  • InnoDB:在MySQL安装过程中,报告了一个不必要的关于创建外键约束系统表的警告。(错误# 26483335)

  • InnoDB:查询在并发时被中断ALTER TABLE由于次级索引条目计数不匹配而产生的操作。(错误# 26381213)

  • InnoDB:试图打开在禁用严格模式以包含冲突时被更改的表时发生分割错误表空间而且压缩属性。(错误# 26375851)

  • InnoDB:在使用TempTable存储引擎的DML操作期间发生分割错误。(错误# 26363837)

  • InnoDB:过程中的隐式行格式转换ALTER TABLE……重组分区操作引发无效断言。(错误# 26326611)

  • InnoDB:一个ALTER TABLE重新构建加密表的操作没有正确设置加密属性。(错误# 26243264)

  • InnoDB:方法时在Windows上遇到内存泄漏易被诱惑的用于内存内部临时表的存储引擎。(错误# 26237680)

  • InnoDB:在未启用Valgrind测试的服务器构建上运行Valgrind测试时,会产生误导性错误。(错误# 26037206)

  • InnoDB:与删除孤立全文搜索表相关的问题代码在启动时导致无效的对象ID断言失败。(错误# 25998362)

  • InnoDB:DML操作期间对丢弃分区的检查只检查第一个分区。检查其他丢弃分区失败导致断言失败。(错误# 25942592)

  • InnoDB:分配的内存在写入文件之前没有初始化,导致Valgrind错误。(Bug #25913151, Bug #85986)

  • InnoDB:在同一条语句中添加虚拟列和索引会导致错误。(错误# 25899959)

  • InnoDB:在对具有多个分区的表进行大型更新操作时,从实例会出现复制延迟。(Bug #25687813, Bug #85352)

  • InnoDB:在结束范围比较期间发生故障。(错误# 25669686)

  • InnoDB:使innodb_buffer_pool_load_now只读模式设置失败。指示缓冲池加载线程未初始化的事件。(错误# 25586766)

  • InnoDB:多版本并发控制行搜索函数的游标位置检查提出了断言。(错误# 25377592)

  • InnoDB:对象传递了错误的变量row_mysql_handle_errors例程导致断言失败。(错误# 25183130)

  • InnoDB:对全文搜索同步操作持有的字典操作锁的长时间等待导致服务器退出。(Bug #24938374, Bug #26376681, Bug #26376239)

  • InnoDB:对断言代码进行了修改,以考虑到这样一种可能性:一个事务试图获取记录上的显式锁,而另一个事务在提交操作之前将同一记录上的隐式锁转换为显式锁。(错误# 24344131)

  • InnoDB:一个刷新表……用于出口对加密表或页压缩表的操作引发断言。(错误# 22916982)

  • InnoDB:一个删除表操作是不允许的innodb_force_recovery设置大于0。(错误# 22392152)

  • InnoDB:一个创建表……选择操作在提交事务之前删除新创建的表时引发断言失败。(错误# 22154768)

  • InnoDB:一个合适的ALTER TABLE由于约束名称重复,重新构建表并添加外键而未指定外键约束名称的操作失败。InnoDB没有考虑到现有的外键约束名称。这个问题在MySQL 8.0.3中得到了解决,当外键元数据被移动到数据字典,外键约束名称生成被移动到SQL层。(Bug #18199504, Bug #71616)

  • InnoDB:对象的错误的函数调用InnoDB已删除外键检查期间的数据字典。(Bug #12917178, Bug #62221)

  • InnoDB:当试图使用现有外键约束名称时,报告的错误消息不一致,并且总是没有提供足够的信息。(Bug #11925430, Bug #60633)

  • 分区:在某些情况下,当获取堆记录时,分区ID可以设置为零。(Bug #86255, Bug #26034430)

  • 分区:这是有可能的创建表语句创建分区失败InnoDB表未能正确回滚。这是由于在执行外键信息检查时进行了无关的提交。由于分区表目前不支持外键,因此没有必要进行这种检查,因此在这种情况下不再进行检查。(Bug #85299, Bug #25667278)

  • 分区:查询涉及在由?分区的表上并不总是正确处理列表.(Bug #76418, Bug #20748521)

    参考文献:参见Bug #86255, Bug #26034430。

  • 复制:在多线程从机上,由于中继日志使用的磁盘空间记录的更新时间,可能会出现死锁状态。更新的时间现在已经更改,因此不会发生死锁。(错误# 26729635)

  • 复制:slave_preserve_commit_order = 1设置后,在持有表上的共享写锁的事务和提交顺序中较早的同样需要共享写锁的事务之间可能会发生死锁。(错误# 26666609)

  • 复制:Group Replication流控制变量现在允许您正确地在组中拥有一些不影响流控制机制的最小吞吐量的成员,从而在这些成员阻塞的情况下有效地忽略它们。(错误# 26537497)

  • 复制:未使用的变量opt_reckless_slave被删除。(错误# 26500285)

  • 复制:当组复制插件Delayed_initialization_thread由于资源不可用,启动失败,一个锁定的互斥锁被保留在后面,这将导致在Delayed_initialization_thread析构函数。该修复确保当线程启动失败时互斥锁被解锁。(错误# 26394678)

  • 复制:在以单主模式部署的Group Replication插件的延迟初始化的情况下,从服务器能够通过异步复制区域通道进行写操作,这在Group Replication插件的正常初始化中是不允许的。(错误# 26314756)

  • 复制:如果选项文件包含Group Replication相关设置,则服务器可能在启动时意外停止。(错误# 26314472)

  • 复制:刷新日志在提交阶段已经发送了错误响应后,试图发送OK消息。感谢Laurynas Biveinis的补丁。(Bug #26272158, Bug #25363745, Bug #84437)

  • 复制:在为事件日志事件生成gtid的情况下,MySQL错误码1590 (ER_SLAVE_INCIDENT)不能使用——slave-skip-errors = 1590复制从机上的启动选项。(错误# 26266758)

  • 复制:COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE何时设置为不正确的值group_replication_recovery_complete_at = " transactions_certified "在一个康复的成员身上。(错误# 26180350)

  • 复制:的值group_replication_recovery_use_ssl而且group_replication_recovery_ssl_verify_server_cert为组复制恢复通道配置时,没有更新变量。(错误# 26142801)

  • 复制:当使用索引复制分区表时,在复制从机上HASH_SCAN被指定为slave_rows_search_algorithms设置时,从I/O线程有时会因错误而停止HA_ERR_KEY_NOT_FOUND.(错误# 26137159)

  • 复制:这是可能的server_uuid相同的值group_replication_group_name.这样做可能会导致意外的行为,因为gtid是由UUID标识的。现在不可能设置了server_uuid相同的值group_replication_group_name.(错误# 26035931)

  • 复制:系统变量pseudo_slave_mode(用于内部服务器使用)有时会在事务内部更改断言时抛出断言。服务器不再在事务中更改此变量。(Bug #26034192, Bug #86250)

  • 复制:方法指定的写集用于复制从的并行处理时binlog_transaction_dependency_tracking系统变量),空事务现在被忽略,并且对中继日志旋转的处理已经优化。(错误# 25982097)

  • 复制:性能模式replication_applier_status_by_worker表有时会错误地为未活动的工作线程显示APPLYING_TRANSACTION的值,因为在工作线程停止之前填充了表。(Bug #25896166, Bug #85951)

  • 复制:正在尝试卸载插件开始GROUP_REPLICATION执行可能会导致意外的行为。(Bug #25423650, Bug #91042, Bug #28088177)

  • 复制:如果在创建多个从应用程序工作线程时发生故障,一些线程将被保留为孤立的,它们的资源将不会被收集。感谢Laurynas Biveinis为修复此bug所做的贡献。(Bug #24679056, Bug #82980)

  • 复制:binlog_checksum选项不能在事务中更改。当请求的函数在二进制日志上执行时,MySQL不能记录此语句,这在事务中是必需的。(错误# 22914463)

  • 复制:可以使用组复制流控制选项的无效值启动服务器。现在,——group-replication-flow-control-min-quota——group-replication-flow-control-max-quota,——group-replication-flow-control-min-recovery-quota选项在服务器启动时进行验证。(Bug #87206, Bug #26531899)

  • 复制:如果主机名解析对Group Replication中的成员不起作用,则尝试连接时返回的错误是引用凭据。错误消息已得到改进,以描述主机名解析的问题。(Bug #86858, Bug #26368004)

  • 复制:组复制插件不再设置auto_increment_increment而且auto_increment_offset变量,当单个主模式是活动的。(Bug #86669, Bug #26263155)

  • 复制:Group Replication分区线程在Performance Schema表中不可见。(Bug #86626, Bug #26241008)

  • 复制:group_replication_force_members可以在团队正常工作的情况下使用,换句话说,大多数人都可以接触到。这种不正确的使用可能会导致团队的不稳定。因此,它的使用被限制在创建它的场景中,即当大多数成员不可访问时,从前一个组的成员的子集中形成一个新的成员。(Bug #86359, Bug #26093967)

  • 复制:在同时运行组复制和异步复制的成员上,异步复制不尊重组复制要求的限制,例如只使用InnoDB存储引擎,表需要主键等等。这也可能在运行时遇到mysqlbinlog对成员。现在,正在运行Group Replication和异步复制的成员不允许破坏Group Replication的需求。(Bug #85164, Bug #25609945)

    参考文献:参见Bug #85781, Bug #25828806。

  • 复制:将运行较低版本的成员加入运行较高版本的组会导致运行较高版本的成员无法访问。(Bug #85026, Bug #25568493)

  • JSON:JSON对象和数组的内部表示中的容器(Json_object而且Json_array)已经更改为使用智能指针而不是原始指针Json_dom,因此孤立的DOM对象现在会自动销毁。(错误# 26161264)

  • JSON:ASCII字符31 (\ u001f当JSON文档被格式化为字符串(例如,by铸造(“\ u001f”为JSON)).(错误# 25977959)

  • JSON:当一个path_expression标识了一个非数组值JSON_INSERT ()而且JSON_ARRAY_INSERT ()函数无法求值path_expression[0]等于path_expression.(Bug #86213, Bug #26022576)

  • JSON:搜索与JSON_EXTRACT ()使用通配符花费了大量的时间。(Bug #84523, Bug #25418534)

    参考文献:参见Bug #83959, Bug #25151440。

  • 在高负载下,性能模式缓冲区容器代码中会出现无限循环。(错误# 26666274)

  • mysql特定的类型定义,例如uchar而且my_bool被无意中重新引入到客户端名称空间,如果mysql.h包括头文件。(Bug #26588846, Bug #26582752, Bug #87337)

  • uint8korr ()相关的宏是固定的,因此它们显式地进行未对齐访问,甚至在x86上也是如此。(Bug #26568748, Bug #87298)

  • main.mysql_upgrade_grant,main.roles-upgrade,auth_sec.secure_file_priv_warnings,测试用例错误地处理了错误日志。的sys_vars.innodb_redo_log_encrypt_basic测试用例输出不稳定。感谢Laurynas Biveinis的补丁。(Bug #26562401, Bug #87279, Bug #26575150, Bug #87313, Bug #26575142, Bug #87314, Bug #26582158, Bug #87303)

  • 对于调试版本,使用sql_buffer_result启用后,递归公共表表达式将导致服务器退出。(错误# 26556025)

  • 不正确地将窗口函数解析为常量函数可能导致服务器退出。(错误# 26500442)

  • 对于窗口函数,使用GROUP BY……与汇总可能导致服务器退出。(Bug #26497353, Bug #26497247)

  • 窗口函数,JSON列斯提出了一个断言。(错误# 26496733)

  • 对于窗口函数,一个小于参数的值范围帧导致服务器退出。(错误# 26496645)

  • 编译和-DWITHOUT_SERVER = 1导致my_symlink.c由于丢失而导致编译失败# includemy_dir.h.感谢Christian Hesse的补丁。(Bug #26495816, Bug #87137)

  • 编译和-DWITH_SSL =系统-DWITH_ZLIB =系统假设系统openssl zlibCommand是可用的,但情况可能并非如此。现在检查该命令的可用性,如果不可用,则zlib_decompress效用是建立。(Bug #26494495, Bug #87123)

  • yaSSL无法正确执行TLS加密协商。(错误# 26482173)

  • 一些thread_stack设置可能导致服务器退出。(错误# 26438067)

  • 对于窗函数,a帧接受行数的非整数参数。(Bug #26411055, Bug #86990)

  • 替换(UUID(),…)表达式可能被缓存(不正确地),并为结果集的每一行返回相同的值。(错误# 26395601)

  • 在源代码树中构建MySQL时,制作安装安装了一些CMake文件到mysql-test目录。(Bug #26385175, Bug #86905)

  • PROCESS_ID列中的“性能架构”session_connect_attrs而且session_account_connect_attrs表格从INT长整型数字无符号以适应更大的进程ID值。感谢Daniël van Eeden提供的补丁。(Bug #26357806, Bug #86835)

  • 生成的列上的索引,其值是由JSON_EXTRACT (),优化器有时没有在应该使用的时候使用它。(错误# 26352119)

  • 设置log_error_services系统变量导致服务器退出。(错误# 26331795)

  • 焦油文件包,一些测试套件共享库安装在服务器包而不是测试包中。(错误# 26329850)

  • 显示列一个有效的视图可能会失败。(Bug #26322203, Bug #86778)

  • 导致重命名或删除直方图统计信息的操作可能导致服务器退出。(错误# 26303972)

  • 对于一个VARCHAR列,使用显式排序规则(命令col_name核对collation_name)比隐式排序要慢得多(不核对子句),即使显式排序与隐式排序相同。(Bug #26286790, Bug #86710)

  • SET binlog_format = ROW产生语法错误,因为现在是一个保留词。为了保持向后兼容性,现在专门识别了该语法。(错误# 26269280)

  • 设置PERSIST_ONLY,应该只允许拥有SYSTEM_VARIABLES_ADMIN而且PERSIST_RO_VARIABLES_ADMIN权限,但也不正确地允许用户使用超级特权。(错误# 26247864)

  • information_schema_statsconfiguration选项,在MySQL 8.0.0中引入,被删除并替换为information_schema_stats_expiry

    information_schema_stats_expiry为缓存定义过期设置INFORMATION_SCHEMA表统计数据。有关更多信息,请参见优化INFORMATION_SCHEMA查询

    TABLES_DYNAMIC而且STATISTICS_DYNAMIC删除系统内部视图。(Bug #26203731, Bug #83957)

  • Debian平台的源包包含预先构建的调试二进制文件,这会在构建这些二进制文件的体系结构以外的任何体系结构上导致构建失败。(错误# 26186911)

  • 如果在服务器启动期间使用UDF注册服务,则该服务无法工作。(错误# 26173244)

  • 通过更改性能模式禁用表插装setup_objects表可能导致索引统计信息中的索引名称不正确。(错误# 26162562)

  • 试图删除不存在的表空间文件时返回误导性错误消息。(Bug #26133507, Bug #86438)

  • 运行时mysqlbinlog——read-from-remote-server方法指定的规则——rewrite-db选项被忽略,因此数据不会写入目标数据库。(Bug #26117735, Bug #86288)

  • 在DDL操作期间从数据字典缓存中复制的时间戳数据使用time_zone不再有效的值。结果的时间戳数据是不正确的,导致发行版构建中的错误和调试构建中的断言失败。(Bug #26091333, Bug #86290)

  • 数据字典更新成功,但写入二进制日志事件失败,可能导致状态不一致。(错误# 26037355)

  • mysqlbinlog现在打印事件类型的完整元数据Table_map_log_event.(错误# 26020990)

  • 的一些字符串函数改变事件语句可能导致服务器退出。(错误# 25942505)

  • 卸载daemon_memcached插件导致严重错误。(错误# 25909540)

  • 准备的语句,使用了一个公共表表达式和许多?参数可能很慢。(Bug #25903274, Bug #85933)

  • 更新删除声明一个ORDER BY……限制子句中,优化器有时无法识别比filesort.(错误# 25899921)

  • rpl_diff.inc测试用例文件没有发现服务器之间的数据差异。感谢Yura Sorokin的补丁。(Bug #25860138, Bug #85838)

  • ngram全文解析器搜索查询返回错误的结果并引发断言。(错误# 25851975)

  • 索引虚拟生成列、外键和触发器的组合可能导致引发断言。(Bug #25817660, Bug #85757)

  • 从视图中进行选择可能会产生启用实体化和禁用实体化的不同结果。(Bug #25782811, Bug #85622)

  • 在使用设置保存设置event_scheduler系统变量,如果以——skip-grant-tables选择。(错误# 25776940)

  • 对于调试构建,向具有外键关系的表添加索引可能会引发断言。(错误# 25739983)

  • 可以引发断言MIN ()/MAX ()访问系统表。(错误# 25738624)

  • INFORMATION_SCHEMA。REFERENTIAL_CONSTRAINTS表请求的外键信息InnoDB存储引擎代替数据字典。(错误# 25730513)

  • 一个失败的删除视图可以写成二进制对数。(错误# 25680097)

  • 显示创建视图有时在原始视图定义中没有的表名中添加数据库名称前缀。(Bug #25634576, Bug #85176)

  • 性能模式variables_info表显示不正确VARIABLE_SOURCE而且VARIABLE_PATH指定的选项文件中设置的变量的值包括!includedir !指令。(错误# 25563891)

  • 对于基于uc的排序,常量字符串传播可能会失败。(Bug #25503965, Bug #84837)

  • mysqlpump转储表数量的进度信息显示错误。(错误# 25432850)

  • UCA 9.0.0排序规则的计算对于裁剪包含缩写字符的规则是低效的。(Bug #25426632, Bug #84577, Bug #25426632, Bug #84577)

  • GROUP BY DESC小数值可能被错误分组与非值。(Bug #25407964, Bug #84537)

  • 一些, mysqldump警告进入标准输出而不是标准错误输出,因此被写入转储文件。(Bug #25380000, Bug #82992)

  • 的结果生成的值与汇总在具有?属性的视图上执行准备好的语句时,已被前一行的值替换GROUP BY . .与汇总条款。(错误# 25174118)

  • 文本全文搜索结果超过innodb_ft_result_cache_limit设置。这个bug的补丁也回移植了一个相关的补丁(bug #21140111)。(错误# 25033538)

  • MySQL 8.0.1中的解析器重构导致了一些错误的处理插入……重复密钥更新语句。这些问题已经得到了纠正。(Bug #24716127, Bug #25526439, Bug #25071305)

  • 对于调试版本,a创建表声明的VARBINARY二进制列的默认值为十六进制格式,会导致服务器退出。(Bug #24679166, Bug #83020)

  • 类中的子查询调用它,如果优化器认为某个存储函数是常量不是在条件在哪里子句可能导致服务器退出。(错误# 23577867)

  • 一个, mysqldump修复了内存泄漏。感谢Yura Sorokin的补丁。(Bug #23531150, Bug #81714)

  • 当查询使用了批处理键访问优化,并且虚拟生成的列是连接缓冲区的一部分时,可能会导致不正确的结果或服务器出口。(错误# 23169112)

  • 如果一个会话回滚到一个保存点,然后被终止,则可以提交保存点之前的语句。(Bug #22350047, Bug #79596)

  • MySQL接受对外部查询块中定义的聚合表达式别名的引用,即使该引用发生在GROUP BY子查询中,而该引用是无意义的。(Bug #21974346, Bug #78785)

  • 对于使用Connector/Python并使用sha256_password插件,服务器可能无法正确处理连接。(错误# 21421642)

  • 一些选择不同的查询与集团可能返回不正确的结果。(Bug #20692219, Bug #76283)