返回列表 发新帖
查看: 546|回复: 0

MySQL 8.0新特性新添加的功能详解

[复制链接]

1万

热度

1万

元宝

1万

贡献

金牌草根

发表于 2018-4-27 13:22:24 | 显示全部楼层 |阅读模式
本帖最后由 民审-M 于 2018-4-27 13:24 编辑

本节总结了mysql 8.0中已添加,弃用和删除的内容。伴随部分列出了MySQL 8.0中已添加,弃用或删除的MySQL服务器选项和变量。请参阅 第1.5节“在MySQL 8.0中添加,弃用或删除的服务器和状态变量和选项”

在MySQL 8.0中添加的功能


以下功能已添加到MySQL 8.0中:

  • 数据字典。 MySQL现在整合了一个存储有关数据库对象信息的事务数据字典。在以前的MySQL版本中,字典数据存储在元数据文件和非事务表中。有关更多信息,请参阅第14章MySQL数据字典
  • 原子数据定义语句(Atomic DDL)。 原子DDL语句将与DDL操作关联的数据字典更新,存储引擎操作和二进制日志写入组合到单个原子事务中。有关更多信息,请参见 第13.1.1节“原子数据定义语句支持”
  • 安全和帐户管理。 这些增强功能是为了提高安全性并增加DBA在帐户管理方面的灵活性而添加的:

    • 一个新的caching_sha2_password 身份验证插件可用。像sha256_password插件一样 , caching_sha2_password实现SHA-256密码散列,但使用缓存解决连接时的延迟问题。它还支持更多的连接协议,并且不需要与基于RSA密钥对的密码交换功能的OpenSSL进行链接。请参见 第6.5.1.3节“缓存SHA-2可插入验证”
      该caching_sha2_password和 sha256_password认证插件提供比更安全的密码加密 mysql_native_password插件,并 caching_sha2_password提供了比更好的性能sha256_password。由于这些优越的安全性和性能特点 caching_sha2_password,它现在是首选身份验证插件,并且也是默认身份验证插件而不是mysql_native_password。有关此更改对服务器操作的影响以及服务器与客户端和连接器的兼容性的信息,请参阅 caching_sha2_password作为首选身份验证插件
    • MySQL现在支持角色,这些角色被命名为特权集合。角色可以创建和删除。角色可以拥有授予和撤消的权限。角色可以授予用户帐户并从其中撤销。可以从授予该帐户的角色中选择适用于某个帐户的活动适用角色,并且可以在该帐户的会话期间对其进行更改。有关更多信息,请参见部分6.3.4,“使用角色”
    • MySQL现在维护有关密码历史记录的信息,从而限制重复使用以前的密码。数据库管理员可能要求不要从以前的密码中选择新的密码进行一些密码更改或一段时间。可以在全局和每个帐户的基础上建立密码重用策略。结合现有的密码到期功能以要求定期更改密码,新的密码历史记录功能可让DBA更加全面地控制密码管理。有关更多信息,请参见第6.3.8节“密码管理”
    • 如果使用OpenSSL进行编译,MySQL现在支持FIPS模式,并且运行时可以使用OpenSSL库和FIPS对象模块。FIPS模式对加密操作施加了条件,例如对可接受的加密算法的限制或对较长密钥长度的要求。请参见第6.6节“FIPS支持”

  • 资源管理。 MySQL现在支持创建和管理资源组,并允许将服务器内运行的线程分配给特定的组,以便线程根据组可用的资源执行。组属性启用对其资源的控制,以启用或限制组中线程的资源消耗。DBA可以根据不同的工作负载适当地修改这些属性。目前,CPU时间是可管理的资源,由“ 虚拟CPU ”作为包括CPU核心,超线程,硬件线程等的术语。服务器在启动时确定有多少虚拟CPU可用,并且具有适当权限的数据库管理员可以将这些CPU与资源组相关联,并将线程分配给组。有关更多信息,请参见 第8.12.5节“资源组”
  • InnoDB增强。 增加了这些InnoDB增强功能:


    • 每次更改值时,当前最大自动增量计数器值都写入重做日志,并保存到每个检查点的引擎专用系统表中。这些更改使当前最大自动增量计数器值在服务器重新启动时保持不变。另外:

      • 服务器重新启动不再取消 AUTO_INCREMENT = N表格选项的作用。如果将自动递增计数器初始化为特定值,或者如果将自动递增计数器值更改为较大值,则新值在服务器重新启动时会持续存在。
      • ROLLBACK 操作之后立即重新启动服务器 不再导致重新分配给回滚事务的自动增量值。
      • 如果将AUTO_INCREMENT 列值修改为大于当前最大自动增量值的值( UPDATE例如,在操作中),则新值将保持不变,并且后续 INSERT操作会从新的较大值开始分配自动递增值。


    • 当遇到索引树破坏时, InnoDB将损坏标志写入重做日志,这使得损坏标志崩溃安全。InnoDB还将内存中损坏标志数据写入每个检查点的引擎专用系统表中。恢复期间,InnoDB从两个位置读取损坏标志,并在将内存表和索引对象标记为损坏之前合并结果。
    • 的InnoDB 分布式缓存插件支持多个 get操作(读取在一个单一的多键/值对分布式缓存 查询)和范围查询。请参见 第15.19.4节“InnoDB memcached多重获取和范围查询支持”
    • 新的动态配置选项 innodb_deadlock_detect可用于禁用死锁检测。在高并发系统上,当大量线程等待相同的锁时,死锁检测会导致速度下降。有时候,innodb_lock_wait_timeout 当死锁发生时,禁用死锁检测并依赖事务回滚的设置可能更有效 。
    • INFORMATION_SCHEMA.INNODB_CACHED_INDEXES 表报告InnoDB每个索引缓冲池中缓存的索引页数 。
    • 所有InnoDB临时表现在都在共享临时表空间中创建, ibtmp1。
    • 该InnoDB 表空间加密功能支持重做日志的加密和撤消日志数据。请参阅 重做日志数据加密撤消日志数据加密
    • InnoDB支持 NOWAIT和SKIP LOCKED选项,SELECT ... FOR SHARE并SELECT ... FOR UPDATE锁定读取语句。 NOWAIT如果请求的行被另一个事务锁定,则会立即返回语句。SKIP LOCKED从结果集中删除锁定的行。请参阅 使用NOWAIT锁定读取并发性并跳过锁定
      SELECT ... FOR SHARE替换 SELECT ... LOCK IN SHARE MODE,但 LOCK IN SHARE MODE仍可用于向后兼容。这些陈述是等同的。然而,FOR UPDATE和 FOR SHARE支持 NOWAIT,SKIP LOCKED和选项。请参见第13.2.10节“SELECT语法”。 OF tbl_name
      OF tbl_name 将锁定查询应用于指定的表。
    • ADD PARTITION,DROP PARTITION,COALESCE PARTITION,REORGANIZE PARTITION,和REBUILD PARTITION ALTER TABLE选项由本地分区就地API的支持,可能与使用 ALGORITHM={COPY|INPLACE}和 LOCK条款。
      DROP PARTITION与 ALGORITHM=INPLACE存储在该分区删除数据并丢弃分区。但是, DROP PARTITION使用 ALGORITHM=COPY或 old_alter_table=ON 重建分区表并尝试将数据从丢弃的分区移动到具有兼容PARTITION ... VALUES 定义的另一个分区。无法移动到另一个分区的数据被删除。
    • 该InnoDB存储引擎现在使用MySQL的数据字典,而不是它自己的存储引擎特定的数据字典。有关数据字典的信息,请参阅 第14章MySQL数据字典
    • mysql系统表和数据字典表现在创建在MySQL数据目录中InnoDB命名的单个 表空间文件 mysql.ibd中。以前,这些表是InnoDB在mysql数据库目录中的单个表空间文件中创建的。
    • 在MySQL 8.0中引入了以下撤消表空间更改:

      • 现在,可以在运行时或使用innodb_undo_tablespaces 配置选项重新启动服务器时修改撤消表空间的数量 。此更改允许在数据库增长时添加撤消表空间和回滚段。
      • innodb_undo_tablespaces 默认值从0变更为2,这意味着回退段在两个单独的还原表,而不是创建 InnoDB默认系统表空间。至少需要两个撤消表空间才能允许撤销日志的截断。
        最小值 innodb_undo_tablespaces 为2,innodb_undo_tablespaces 不再允许设置 为0。最小值2确保回滚段始终在撤消表空间中创建,而不是在系统表空间中创建。有关更多信息,请参见 第15.7.8节“配置撤消表空间”
      • 用于撤消表空间文件的命名约定从更改 为 ,其中 是撤消空间编号。 undoNNNundo_NNNNNN
      • innodb_rollback_segments 配置选项定义每撤消表回退段的数目。以前,它 innodb_rollback_segments 是一个全局设置,用于指定MySQL实例的回退段的总数。此更改增加了可用于并发事务的回滚段的数量。更多的回滚段增加了并发事务对撤消日志使用单独的回滚段的可能性,从而减少资源争用。
      • 该innodb_undo_logs 配置选项被删除。的 innodb_rollback_segments 配置选项执行相同的功能,并应被代替使用。
      • 该Innodb_available_undo_logs 状态变量被删除。可以使用检索每个表空间的可用回滚段的数量SHOW VARIABLES LIKE 'innodb_rollback_segments';

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

      • innodb_max_dirty_pages_pct_lwm 默认值现在是10。0先前的默认值禁用缓冲池预冲洗。当缓冲池中脏页的百分比超过10%时,值为10将启用预先浮动。启用预冲可提高性能一致性。
      • innodb_max_dirty_pages_pct 默认值从75到90。增加 InnoDB尝试从缓冲池刷新数据,使脏页的百分比不超过这个值。增加的默认值允许缓冲池中更大比例的脏页面。

    • 现在默认 innodb_autoinc_lock_mode 设置为2(交错)。交叉锁定模式允许并行执行多行插入,从而提高并发性和可伸缩性。新的 innodb_autoinc_lock_mode 默认设置反映了从基于语句的复制到基于行的复制的变化,作为MySQL 5.7中的默认复制类型。基于语句的复制需要连续的自动增量锁定模式(以前的默认值)来确保为给定的SQL语句序列以可预测和可重复的顺序分配自动增量值,而基于行的复制不会对SQL语句的执行顺序。有关更多信息,请参阅 InnoDB AUTO_INCREMENT锁定模式
      对于使用基于语句的复制的系统,新的 innodb_autoinc_lock_mode 默认设置可能会中断依赖于顺序自动增量值的应用程序。要恢复先前的默认值,请设置innodb_autoinc_lock_mode 为1。
    • ALTER TABLESPACE ... RENAME TO语法 支持重命名通用表空间 。
    • innodb_dedicated_server 配置选项默认情况下处于禁用状态,可用于InnoDB根据服务器上检测到的内存量自动配置以下选项:


      该选项适用于在专用服务器上运行的MySQL服务器实例。有关更多信息,请参见 第15.6.13节“为专用MySQL服务器启用自动配置”
    • INFORMATION_SCHEMA.INNODB_TABLESPACES_BRIEF 视图为表空间提供空间,名称,路径,标志和空间类型数据InnoDB。
    • 与MySQL捆绑在一起 的zlib库版本从版本1.2.3升级到版本1.2.11。MySQL在zlib库的帮助下实现压缩。
      如果使用InnoDB压缩表,请参见第2.10.1.2节“影响升级到MySQL 8.0的更改”以了解相关的升级影响。
    • 序列化字典信息(SDI)存在于InnoDB除临时表空间和撤消表空间文件之外的所有表空间文件中。SDI是表和表空间对象的序列化元数据。SDI数据的存在提供元数据冗余。例如,如果数据字典变得不可用,字典对象元数据可能从表空间文件中提取。使用ibd2sdi工具执行SDI提取 。SDI数据以JSON格式存储 。
      在表空间文件中包含SDI数据会增加表空间文件的大小。SDI记录需要一个索引页面,默认大小为16k。但是,SDI数据在存储时会被压缩以减少存储空间。
    • 该InnoDB存储引擎现在支持原子DDL,这保证了DDL操作要么完全提交或回滚,即使服务器在操作时停止。有关更多信息,请参见第13.1.1节“原子数据定义语句支持”
    • 使用该innodb_directories 选项可以在服务器脱机时将表空间文件移动或恢复到新的位置 。有关更多信息,请参见 第15.7.7节“在服务器处于脱机状态时移动表空间文件”
    • 以下重做日志优化已实现:

      • 用户线程现在可以并发写入日志缓冲区而不同步写入。
      • 用户线程现在可以按照宽松的顺序将脏页面添加到flush列表中。
      • 现在专用的日志线程负责将日志缓冲区写入系统缓冲区,将系统缓冲区刷新到磁盘,将写入和刷新的重做通知用户线程,维持放宽的清空列表顺序所需的延迟,并编写检查点。
      • 添加了系统变量,用于配置等待刷新重做的用户线程使用旋转延迟:

      • innodb_log_buffer_size 配置选项现在是动态的,在服务器运行时,其允许调整日志缓冲区的。


      有关更多信息,请参见 第8.5.4节“优化InnoDB重做日志记录”

  • 字符集支持。 默认字符集已从更改 latin1为utf8mb4。该utf8mb4字符集有几个新的排序规则,其中包括 utf8mb4_ja_0900_as_cs,提供对Unicode在MySQL中第一个日本特定语言的排序规则。有关更多信息,请参见 第10.10.1节“Unicode字符集”
  • JSON增强。 对MySQL的JSON功能进行了以下增强或增加:

    • 添加了 ->> (内联路径)运算符,这相当于调用 JSON_UNQUOTE()结果JSON_EXTRACT()
      这是-> MySQL 5.7中引入的列路径运算符的改进 ; col->>"$.path"相当于 JSON_UNQUOTE(col->"$.path")。内联路径运算符可以用来随时随地可以使用JSON_UNQUOTE(JSON_EXTRACT()),如 SELECT列清单, WHERE和HAVING 条款,并ORDER BY和 GROUP BY条款。有关更多信息,请参阅运算符的说明以及第12.16.8节“JSON路径语法”
    • 增加了两个JSON聚合函数 JSON_ARRAYAGG()JSON_OBJECTAGG()。 JSON_ARRAYAGG()将列或表达式作为其参数,并将结果汇总为单个JSON数组。该表达式可以评估为任何MySQL数据类型; 这不一定是一个JSON价值。 JSON_OBJECTAGG()将两个列或表达式解释为一个键和一个值; 它将结果作为单个JSON 对象返回。有关更多信息和示例,请参见 第12.19节“聚合(GROUP BY)函数”
    • 添加了JSON实用程序功能JSON_PRETTY(),该功能 JSON 以易于阅读的格式输出现有值; 每个JSON对象成员或数组值都打印在一个单独的行上,并且子对象或数组的打算是相对于其父项的两个空格。
      这个函数也可以处理一个可以被解析为JSON值的字符串。
      有关更多详细信息和示例,请参见 第12.16.7节“JSON实用程序函数”
    • JSON在使用查询 排序值时ORDER BY,每个值现在由排序关键字的可变长度部分表示,而不是固定1K大小的一部分。在很多情况下,这可以减少过度使用; 例如,一个标量INT或偶 BIGINT数值实际上只需要很少的字节,所以这个空间的剩余部分(高达90%或更多)被填充占用。此更改对性能具有以下好处:

      • 现在可以更有效地使用排序缓冲区空间,因此文件排序不需要像定长排序键那样尽早或经常刷新到磁盘。这意味着更多的数据可以在内存中排序,避免不必要的磁盘访问。
      • 较短的密钥可以比较长的密钥更快地进行比较,从而显着改善性能。这对于完全在内存中执行的排序以及需要向磁盘写入和从磁盘读取的排序来说都是如此。

    • 在MySQL 8.0.2中增加了对JSON列值进行部分原地更新的支持,这比完全删除现有JSON值并在其位置编写新的JSON值更有效,就像以前在更新任何JSON列时所做的那样。要应用这种优化,更新,必须使用应用 JSON_SET()JSON_REPLACE()JSON_REMOVE()。新元素无法添加到正在更新的JSON文档中; 文档中的值不会比更新之前占用更多的空间。请参阅 部分更新的JSON值,详细讨论这些要求。
      可以将部分JSON文档更新写入二进制日志,占用的空间少于记录完整JSON文档的空间。当使用基于语句的复制时,部分更新始终会被记录。为了与基于行的复制一起工作,您必须先设置 binlog_row_value_options=PARTIAL_JSON; 请参阅此变量的说明以获取更多信息。
    • 添加了JSON实用程序功能 JSON_STORAGE_SIZE()JSON_STORAGE_FREE()。 JSON_STORAGE_SIZE()在任何部分更新之前返回用于JSON文档二进制表示的字节存储空间(请参阅前一项)。 JSON_STORAGE_FREE()显示JSON使用JSON_SET()or 部分更新后,类型表列中剩余的空间量 JSON_REPLACE(); 如果新值的二进制表示小于以前的值,则该值大于零。
      这些函数中的每一个还接受JSON文档的有效字符串表示。对于这样的值, JSON_STORAGE_SIZE()返回其二进制表示在转换为JSON文档后使用的空间。对于包含JSON文档的字符串表示形式的变量, JSON_STORAGE_FREE()返回零。如果它的(非空)参数不能被解析为有效的JSON文档,并且NULL参数是,则 任何函数都会产生错误NULL。
      有关更多信息和示例,请参见 第12.16.7节“JSON实用程序函数”
      JSON_STORAGE_SIZE()并 JSON_STORAGE_FREE()在MySQL 8.0.2中实现。
    • 在MySQL 8.0.2中增加了对$[1 to 5]XPath表达式等范围的支持 。还在此版本中为last关键字和相对寻址添加了支持 ,以便$[last]始终选择数组中最后一个(编号最大的)元素和 $[last-1]最后一个元素的下一个元素。 last并且使用它的表达式也可以包含在范围定义中; 例如, $[last-2 to last-1]返回数组中的最后两个元素。有关其他信息和示例,请参阅 搜索和修改JSON值
    • 添加了符合RFC 7396的JSON合并功能 。 JSON_MERGE_PATCH()在2个JSON对象上使用时,将它们合并到一个JSON对象中,该对象具有以下集合的联合成员:

      • 第一个对象的每个成员都没有成员,第二个对象中具有相同的键。
      • 没有成员的第二个对象的每个成员在第一个对象中具有相同的键,并且其值不是JSON null文本。
      • 每个成员都有一个存在于两个对象中的键,而其第二个对象中的值不是JSON null文字。


      作为这项工作的一部分,该 JSON_MERGE()功能已被重新命名 JSON_MERGE_PRESERVE()。 JSON_MERGE()继续被认为是JSON_MERGE_PRESERVE()MySQL 8.0中的别名,但现在已被弃用,并且可能在未来版本的MySQL中被删除。
      有关更多信息和示例,请参见 第12.16.4节“修改JSON值的函数”
    • 实现了“ 最后重复密钥获胜 ” 重复密钥规范化,符合 RFC 7159和大多数JavaScript解析器。此处显示了此行为的一个示例,其中仅x保留了具有密钥的最右侧成员:
      mysql> SELECT JSON_OBJECT('x', '32', 'y', '[true, false]',      >                     'x', '"abc"', 'x', '100') AS Result;+------------------------------------+| Result                             |+------------------------------------+| {"x": "100", "y": "[true, false]"} |+------------------------------------+1 row in set (0.00 sec)
      插入到MySQL JSON列中的值 也以这种方式标准化,如下例所示:
      mysql> CREATE TABLE t1 (c1 JSON);mysql> INSERT INTO t1 VALUES ('{"x": 17, "x": "red", "x": [3, 5, 7]}');mysql> SELECT c1 FROM t1;+------------------+| c1               |+------------------+| {"x": [3, 5, 7]} |+------------------+
      这是与以前版本的MySQL不兼容的变化, 在这种情况下使用了“ 第一个重复键赢 ”算法。
      有关更多信息和示例请参阅规范化,合并和自动套接JSON值
    • JSON_TABLE() 在MySQL 8.0.4中 添加了该功能。该函数接受JSON数据并将其作为具有指定列的关系表返回。
      此函数具有语法 ,其中 是返回JSON数据的表达式,是应用于源的JSON路径,并且 是列定义的列表。这里显示一个例子: JSON_TABLE(expr, path COLUMNScolumn_list) [AS] alias)exprpathcolumn_list
      mysql> SELECT *     -> FROM      ->   JSON_TABLE(    ->     '[{"a":3,"b":"0"},{"a":"3","b":"1"},{"a":2,"b":1},{"a":0},{"b":[1,2]}]',    ->     "$
    • " COLUMNS(    ->       rowid FOR ORDINALITY,    ->       ->       xa INT EXISTS PATH "$.a",    ->       xb INT EXISTS PATH "$.b",    ->           ->       sa VARCHAR(100) PATH "$.a",    ->       sb VARCHAR(100) PATH "$.b",    ->           ->       ja JSON PATH "$.a",           ->       jb JSON PATH "$.b"    ->     )       ->   ) AS  jt1;+-------+------+------+------+------+------+--------+| rowid | xa   | xb   | sa   | sb   | ja   | jb     |+-------+------+------+------+------+------+--------+|     1 |    1 |    1 | 3    | 0    | 3    | "0"    ||     2 |    1 |    1 | 3    | 1    | "3"  | "1"    ||     3 |    1 |    1 | 2    | 1    | 2    | 1      ||     4 |    1 |    0 | 0    | NULL | 0    | NULL   ||     5 |    0 |    1 | NULL | NULL | NULL | [1, 2] |+-------+------+------+------+------+------+--------+
      JSON源表达式可以是任何生成有效JSON文档的表达式,包括JSON文本,表列或返回JSON的函数调用,如JSON_EXTRACT(t1, data, '$.post.comments')。有关更多信息,请参见 第12.16.6节“JSON表函数”

  • 优化。 这些优化器增强功能被添加:

    • MySQL现在支持不可见索引。优化器根本不使用不可见索引,但通常保持不变。索引默认是可见的。不可见的索引可以测试删除索引对查询性能的影响,而不会做出必须撤销的破坏性更改,如果索引变为需要的话。参见 第8.3.12节“不可见索引”
    • MySQL现在支持降序索引: DESC在索引定义中不再被忽略,但会导致键值按降序存储。以前,索引可能会以相反顺序扫描,但性能会受到影响。可以按照顺序扫描降序索引,这是更高效的。降序索引还使得优化器可以在最有效的扫描顺序混合某些列的升序和其他列的降序时使用多列索引。请参见第8.3.13节“降序索引”

  • 公用表表达式。 MySQL现在支持通用表表达式,既是非递归的,也是非递归的。通用表表达式允许使用命名临时结果集,通过允许WITH子句前面的SELECT语句和某些其他语句来实现。有关更多信息,请参见 第13.2.13节“WITH语法(公用表表达式)”
  • 窗口功能。 MySQL现在支持窗口函数,对于查询中的每一行,使用与该行相关的行执行计算。这些包括诸如 RANK()LAG(),和 NTILE()。另外,现在几个现有的聚合函数可以用作窗口函数; 例如, SUM()AVG()。有关更多信息,请参见第12.20节“窗口函数”
  • 正则表达式支持。 以前,MySQL使用Henry Spencer正则表达式库来支持正则表达式运算符(REGEXPRLIKE)。正则表达式支持已使用Unicode国际组件(ICU)重新实现,该组件提供全面的Unicode支持并且是多字节安全的。该 REGEXP_LIKE()函数以REGEXPRLIKE 运算符的方式执行正则表达式匹配 ,现在它们是该函数的同义词。此外, REGEXP_INSTR()REGEXP_REPLACE(),和 REGEXP_SUBSTR()函数可用于查找匹配位置并分别执行子字符串替换和提取。该 regexp_stack_limitregexp_time_limit系统变量提供了通过发动机匹配的资源消耗的控制。有关更多信息,请参见 第12.5.2节“正则表达式”。有关使用正则表达式的应用程序可能会受到实现更改影响的方式的信息,请参阅 正则表达式兼容性注意事项
  • 内部临时表。 的TempTable存储引擎替换MEMORY存储引擎作为默认发动机用于在内存中的内部临时表。该TempTable存储引擎提供了有效的存储 VARCHARVARBINARY列。的 internal_tmp_mem_storage_engine 会话变量定义了用于在存储器内的临时表的存储引擎。允许的值是 TempTable(默认值)和 MEMORY。的temptable_max_ram 配置选项定义的存储器,所述最大数量TempTable之前的数据被存储到磁盘存储引擎可以使用。
  • 日志记录。 错误日志记录被重写为使用MySQL组件体系结构。传统错误日志记录是使用内置组件实现的,并且使用系统日志进行日志记录是作为可加载组件实现的。另外,还有一个可加载的JSON日志记录器。要控制启用哪些日志组件,请使用 log_error_services系统变量。有关更多信息,请参见 第5.4.2节“错误日志”
  • 备份锁。 一种新的备份锁允许在线备份期间的DML,同时防止可能导致快照不一致的操作。新的备份锁由LOCK INSTANCE FOR BACKUPUNLOCK INSTANCE语法支持 。该 BACKUP_ADMIN权限才能使用这些语句。
  • 复制。 MySQL复制有以下增强功能:

    • MySQL复制现在支持使用紧凑的二进制格式对JSON文档进行部分更新的二进制日志记录,从而节省日志中记录完整JSON文档的空间。这种紧凑的日志记录是在基于语句的日志记录正在使用时自动完成的,并且可以通过设置新的binlog_row_value_options系统变量来启用 PARTIAL_JSON。有关更多信息,请参阅JSON值的部分更新以及描述 binlog_row_value_options





特性在MySQL 8.0中不推荐使用


以下功能在MySQL 8.0中不推荐使用,并且可能会在未来的系列中删除。在显示替代品的地方,应该更新应用程序以使用它们。
对于那些使用在MySQL 8.0中已弃用的功能的应用程序,它们在更高版本的MySQL系列中已被删除,当从MySQL 8.0主站复制到更高系列的从站时,语句可能会失败,或者可能对主站和从站有不同的影响。为避免此类问题,应修改使用8.0中弃用功能的应用程序,以避免它们,并尽可能使用替代方法。


特性在MySQL 8.0中被删除


以下项目已过时并已在MySQL 8.0中删除。在显示替代品的地方,应该更新应用程序以使用它们。
对于使用MySQL 8.0中删除的功能的MySQL 5.7应用程序,当从MySQL 5.7主站复制到MySQL 8.0从站时,语句可能会失败,或者可能对主站和从站有不同的影响。为了避免这些问题,应该修改使用MySQL 8.0中删除的功能的应用程序,以避免它们,并尽可能使用替代方法。
  • information_schema_stats 在MySQL 8.0.0中引入 的配置选项已被删除,并information_schema_stats_expiry 在MySQL 8.0.3中被替换 。
    information_schema_stats_expiry为缓存INFORMATION_SCHEMA表统计信息定义到期设置 。有关更多信息,请参见 第8.2.3节“优化INFORMATION_SCHEMA查询”
  • InnoDBMySQL 8.0.3中删除了 与废弃系统表相关的代码。 INFORMATION_SCHEMA基于InnoDB系统表的视图被数据字典表上的内部系统视图所取代。受影响的 InnoDBINFORMATION_SCHEMA视图被重命名为:
    表1.1重命名InnoDB信息模式视图
    [td]
    旧名称新名字
    INNODB_SYS_COLUMNSINNODB_COLUMNS
    INNODB_SYS_DATAFILESINNODB_DATAFILES
    INNODB_SYS_FIELDSINNODB_FIELDS
    INNODB_SYS_FOREIGNINNODB_FOREIGN
    INNODB_SYS_FOREIGN_COLSINNODB_FOREIGN_COLS
    INNODB_SYS_INDEXESINNODB_INDEXES
    INNODB_SYS_TABLESINNODB_TABLES
    INNODB_SYS_TABLESPACESINNODB_TABLESPACES
    INNODB_SYS_TABLESTATSINNODB_TABLESTATS
    INNODB_SYS_VIRTUALINNODB_VIRTUAL




    升级到MySQL 8.0.3或更高版本后,更新任何引用先前InnoDB INFORMATION_SCHEMA视图名称的脚本。
  • 以下与帐户管理相关的功能已被删除:

  • 查询缓存已被删除。删除包括这些项目:


    这些不推荐使用的查询缓存项目保留不推荐使用,但不起作用,并且将在未来的MySQL版本中删除:
    • 在SQL_CACHE和 SQL_NO_CACHE SELECT修饰。
    • 该ndb_cache_check_time系统变量。


    该have_query_cache系统变量仍然是过时的,总是有一个值 NO,并会在将来的MySQL版本中删除。
  • 数据字典提供有关数据库对象的信息,因此服务器不再检查数据目录中的目录名称以查找数据库。因此, --ignore-db-dir选项和 ignore_db_dirs系统变量是无关的并且已被删除。
  • 该tx_isolation和 tx_read_only系统变量已被删除。使用 transaction_isolationtransaction_read_only 不是。
  • 该sync_frm系统变量已被删除,因为.frm文件已经过时。
  • 该secure_auth系统变量和 --secure-auth客户端选项已被删除。C API函数的MYSQL_SECURE_AUTH选项mysql_options()已被删除。
  • 该multi_range_count系统变量已被删除。
  • 该log_warnings系统变量和 --log-warnings服务器选项已被删除。改用 log_error_verbosity系统变量。
  • sql_log_bin系统变量 的全局范围 已被删除。sql_log_bin仅具有会话范围,并且@@global.sql_log_bin应该调整依赖访问的应用程序 。
  • 这些过时兼容性SQL模式已被删除: DB2,MAXDB, MSSQL,MYSQL323, MYSQL40,ORACLE, POSTGRESQL, NO_FIELD_OPTIONS, NO_KEY_OPTIONS,NO_TABLE_OPTIONS。它们不能再分配给sql_mode系统变量或作为mysqldump --compatible选项的允许值使用 。
    删除MAXDB意味着 TIMESTAMP数据类型为 CREATE TABLEALTER TABLE不再被视为DATETIME
  • 未使用date_format, datetime_format, time_format,和 max_tmp_tables系统变量已被删除。
  • 在EXTENDED与 PARTITIONS该关键字 EXPLAIN声明已被删除。这些关键字是不必要的,因为它们的效果总是启用
  • 这些与加密相关的项目已被删除:


    取代已删除的加密函数:对于 ENCRYPT(),请考虑使用 SHA2()单向散列。对于其他人,请考虑使用 AES_ENCRYPT()AES_DECRYPT()而不是。
  • 在MySQL 5.7中,多个名称下可用的几个空间函数已被弃用,以使空间函数名称空间更加一致,目标是如果每个空间函数名称ST_执行精确操作,或者MBR执行基于最小边界矩形的操作。在MySQL 8.0中,废弃的函数被去除仅离开对应的ST_和 MBR功能:

    • 这些功能有利于去除的 MBR名字: Contains(), Disjoint(), Equals(), Intersects(), Overlaps(), Within()。
    • 这些功能有利于去除的 ST_名字:Area(), AsBinary(), AsText(),AsWKB(), AsWKT(),Buffer(), Centroid(), ConvexHull(), Crosses(),Dimension(), Distance(), EndPoint(), Envelope(), ExteriorRing(), GeomCollFromText(), GeomCollFromWKB(), GeomFromText(),GeomFromWKB(), GeometryCollectionFromText(), GeometryCollectionFromWKB(), GeometryFromText(), GeometryFromWKB(), GeometryN(),GeometryType(), InteriorRingN(), IsClosed(), IsEmpty(), IsSimple(), LineFromText(), LineFromWKB(), LineStringFromText(),LineStringFromWKB(), MLineFromText(), MLineFromWKB(), MPointFromText(), MPointFromWKB(), MPolyFromText(), MPolyFromWKB(),MultiLineStringFromText(), MultiLineStringFromWKB(), MultiPointFromText(), MultiPointFromWKB(), MultiPolygonFromText(),MultiPolygonFromWKB(), NumGeometries(), NumInteriorRings(), NumPoints(), PointFromText(), PointFromWKB(), PointN(),PolyFromText(), PolyFromWKB(), PolygonFromText(), PolygonFromWKB(), SRID(), StartPoint(), Touches(),X(), Y()。
    • GLength()被删除赞成 ST_Length()

  • 第12.15.4节“从WKB值创建几何值 的函数”中描述的函数 先前接受了WKB字符串或几何参数。几何参数不再允许并产生错误。有关将查询迁移到使用几何参数的指导原则,请参阅该部分。
  • 解析器不再被视为SQL语句中\N的同义词NULL。NULL改为使用 。
    此更改不会影响使用LOAD DATA INFILEor 执行的文本文件导入或导出操作 SELECT ... INTO OUTFILE,为此可NULL 继续使用\N。请参见 第13.2.7节“LOAD DATA INFILE语法”
  • PROCEDURE ANALYSE() 语法被删除。
  • 客户端--ssl和 --ssl-verify-server-cert选项已被删除。使用 --ssl-mode=REQUIRED而不是--ssl=1或 --enable-ssl。使用 --ssl-mode=DISABLED替代--ssl=0,--skip-ssl或 --disable-ssl。使用 --ssl-mode=VERIFY_IDENTITY 而不是--ssl-verify-server-cert 选项。(服务器端 --ssl选项保持不变。)
    对于C API,MYSQL_OPT_SSL_ENFORCE以及 MYSQL_OPT_SSL_VERIFY_SERVER_CERT选项mysql_options() 对应于客户端--ssl和 --ssl-verify-server-cert选择和已被删除。使用MYSQL_OPT_SSL_MODE选项值SSL_MODE_REQUIREDor或者 SSL_MODE_VERIFY_IDENTITY。
  • --temp-pool服务器选项已被删除。
  • --ignore-builtin-innodb 服务器选项和 ignore_builtin_innodb 系统变量已被删除。
  • 服务器不再执行将包含特殊字符的pre-MySQL 5.1数据库名称转换为5.1格式并添加#mysql50#前缀。由于这些转换不再执行,则 --fix-db-names与 --fix-table-names对选项 mysqlcheck的,该UPGRADE DATA DIRECTORY NAME条款的 ALTER DATABASE声明,以及Com_alter_db_upgrade状态变量已被删除。
    只有从一个主要版本到另一个主要版本才支持升级(例如,5.0到5.1或5.1到5.5),因此只需要将旧的5.0数据库名称转换为当前版本的MySQL。作为一种解决方法,在升级到更新版本之前,将MySQL 5.0安装升级到MySQL 5.1。
  • mysql_install_db的计划已经从MySQL分发中删除。数据目录初始化应该通过使用 or 选项调用mysqld来执行 。另外, 对于选择的mysqld已使用的 mysql_install_db的已被删除,而那控制了安装位置的选择 mysql_install_db的已被删除。 --initialize--initialize-insecure--bootstrapINSTALL_SCRIPTDIR CMake
  • 通用分区处理程序已从MySQL服务器中删除。为了支持给定表的分区,用于该表的存储引擎现在必须提供它自己的(“ 本地 ”)分区处理程序。在--partition和 --skip-partition选项已经从MySQL服务器删除,分区相关条目中的输出不再显示SHOW PLUGINS或在 INFORMATION_SCHEMA.PLUGINS 表中。
    两个MySQL存储引擎目前提供原生支持-分区InnoDBNDB; 其中只有 InnoDBMySQL 8.0支持。任何使用任何其他存储引擎在MySQL 8.0中创建分区表的尝试都会失败。
    升级的后果。 不支持使用非MySQL InnoDB(例如 MyISAM)从MySQL 5.7(或更早版本)到MySQL 8.0 的存储引擎直接升级分区表。有两种选择来处理这样的表格:


    在InnoDB 将服务器升级到MySQL 8.0之前,必须对每个分区非表执行至少一项刚刚列出的操作。否则,升级后不能使用这样的表格。
    由于使用不带分区支持的存储引擎生成分区表的表创建语句现在会因错误(ER_CHECK_NOT_IMPLEMENTED)而失败,因此必须确保转储文件中的任何语句(例如由mysqldump编写的语句)从希望导入到创建分区表的MySQL 8.0服务器的较旧版本的MySQL中,不要指定像MyISAM没有本地分区处理程序那样的存储引擎 。您可以通过执行以下任一操作来完成此操作:
    • 删除对CREATE TABLE使用STORAGE ENGINE除以外选项的值的语句进行分区的所有引用 InnoDB。
    • 指定存储引擎为 默认值InnoDB,或允许 InnoDB用作表的存储引擎。


  • 系统和状态变量信息不再保存在INFORMATION_SCHEMA。这些表已被删除: GLOBAL_VARIABLES, SESSION_VARIABLES, GLOBAL_STATUS, SESSION_STATUS。改用相应的性能模式表。请参见 第25.11.13节“性能模式系统变量表”第25.11.14节“性能模式状态变量表”。另外,show_compatibility_56 系统变量已被删除。它被用于过渡期间的系统和状态变量信息INFORMATION_SCHEMA表被移动到性能模式表,并不再需要。这些状态变量已被删除: Slave_heartbeat_period, Slave_last_heartbeat,Slave_received_heartbeats, Slave_retried_transactions, Slave_running。他们提供的信息可在性能模式表中找到; 请参阅 迁移到性能架构系统和状态变量表
  • Performance Schema setup_timers表已被删除,TICK与performance_timers表中的行一样。
  • 该libmysqld嵌入式服务器库已被删除,连同:

    • 在, , ,和 选项 mysql_options()MYSQL_OPT_GUESS_CONNECTIONMYSQL_OPT_USE_EMBEDDED_CONNECTIONMYSQL_OPT_USE_REMOTE_CONNECTIONMYSQL_SET_CLIENT_IP
    • mysql_config --libmysqld-libs, --embedded-libs和 --embedded选项
    • CMake的 WITH_EMBEDDED_SERVER, WITH_EMBEDDED_SHARED_LIBRARY和 INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR 选项
    • (无证)的mysql --server-arg选项
    • mysqltest --embedded-server, --server-arg和 --server-file选项
    • mysqltest_embeddedmysql_client_test_embedded测试程序

  • mysql_plugin工具已被删除。替代方法包括使用--plugin-load--plugin-load-add选项在服务器启动时加载插件,或者在运行时使用该INSTALL PLUGIN语句加载插件 。
  • 以下服务器错误代码未被使用并被删除。应该更新专门针对这些错误进行测试的应用程序。
    ER_BINLOG_READ_EVENT_CHECKSUM_FAILUREER_BINLOG_ROW_RBR_TO_SBRER_BINLOG_ROW_WRONG_TABLE_DEFER_CANT_ACTIVATE_LOGER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTIONER_CANT_CREATE_FEDERATED_TABLEER_CANT_CREATE_SROUTINEER_CANT_DELETE_FILEER_CANT_GET_WDER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFFER_CANT_SET_WDER_CANT_WRITE_LOCK_LOG_TABLEER_CREATE_DB_WITH_READ_LOCKER_CYCLIC_REFERENCEER_DB_DROP_DELETEER_DELAYED_NOT_SUPPORTEDER_DIFF_GROUPS_PROCER_DISK_FULLER_DROP_DB_WITH_READ_LOCKER_DROP_USERER_DUMP_NOT_IMPLEMENTEDER_ERROR_DURING_CHECKPOINTER_ERROR_ON_CLOSEER_EVENTS_DB_ERRORER_EVENT_CANNOT_DELETEER_EVENT_CANT_ALTERER_EVENT_COMPILE_ERRORER_EVENT_DATA_TOO_LONGER_EVENT_DROP_FAILEDER_EVENT_MODIFY_QUEUE_ERRORER_EVENT_NEITHER_M_EXPR_NOR_M_ATER_EVENT_OPEN_TABLE_FAILEDER_EVENT_STORE_FAILEDER_EXEC_STMT_WITH_OPEN_CURSORER_FAILED_ROUTINE_BREAK_BINLOGER_FLUSH_MASTER_BINLOG_CLOSEDER_FORM_NOT_FOUNDER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF__UNUSEDER_FRM_UNKNOWN_TYPEER_GOT_SIGNALER_GRANT_PLUGIN_USER_EXISTSER_GTID_MODE_REQUIRES_BINLOGER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LISTER_HASHCHKER_INDEX_REBUILDER_INNODB_NO_FT_USES_PARSERER_LIST_OF_FIELDS_ONLY_IN_HASH_ERRORER_LOAD_DATA_INVALID_COLUMN_UNUSEDER_LOGGING_PROHIBIT_CHANGING_OFER_MALFORMED_DEFINERER_MASTER_KEY_ROTATION_ERROR_BY_SEER_NDB_CANT_SWITCH_BINLOG_FORMATER_NEVER_USEDER_NISAMCHKER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERRORER_NO_FILE_MAPPINGER_NO_GROUP_FOR_PROCER_NO_RAID_COMPILEDER_NO_SUCH_KEY_VALUEER_NO_SUCH_PARTITION__UNUSEDER_OBSOLETE_CANNOT_LOAD_FROM_TABLEER_OBSOLETE_COL_COUNT_DOESNT_MATCH_CORRUPTEDER_ORDER_WITH_PROCER_PARTITION_SUBPARTITION_ERRORER_PARTITION_SUBPART_MIX_ERRORER_PART_STATE_ERRORER_PASSWD_LENGTHER_QUERY_ON_MASTERER_RBR_NOT_AVAILABLEER_SKIPPING_LOGGED_TRANSACTIONER_SLAVE_CHANNEL_DELETEER_SLAVE_MULTIPLE_CHANNELS_HOST_PORTER_SLAVE_MUST_STOPER_SLAVE_WAS_NOT_RUNNINGER_SLAVE_WAS_RUNNINGER_SP_GOTO_IN_HNDLRER_SP_PROC_TABLE_CORRUPTER_SQL_MODE_NO_EFFECTER_SR_INVALID_CREATION_CTXER_TABLE_NEEDS_UPG_PARTER_TOO_MUCH_AUTO_TIMESTAMP_COLSER_UNEXPECTED_EOFER_UNION_TABLES_IN_DIFFERENT_DIRER_UNSUPPORTED_BY_REPLICATION_THREADER_UNUSED1ER_UNUSED2ER_UNUSED3ER_UNUSED4ER_UNUSED5ER_UNUSED6ER_VIEW_SELECT_DERIVED_UNUSEDER_WRONG_MAGICER_WSAS_FAILED
  • 弃用INFORMATION_SCHEMA INNODB_LOCKSINNODB_LOCK_WAITS表已被删除。改用性能模式 data_locksdata_lock_waits表格。
    注意
    在MySQL 5.7中,LOCK_TABLE在列INNODB_LOCKS表和locked_table在列 sys模式 innodb_lock_waitsx$innodb_lock_waits视图包含组合模式/表名的值。在MySQL 8.0中,data_locks表和 sys模式视图包含单独的模式名称和表名称列。请参见 第26.4.3.9节“innodb_lock_waits和x $ innodb_lock_waits视图”
  • InnoDB不再支持压缩临时表。当 innodb_strict_mode启用(默认值), CREATE TEMPORARY TABLE如果返回错误 ROW_FORMAT=COMPRESSED或 KEY_BLOCK_SIZE指定的。如果 innodb_strict_mode禁用,则会发出警告,并使用非压缩的行格式创建临时表。
  • InnoDB 在MySQL数据目录之外创建表空间数据文件时不再创建 .isl文件(InnoDB符号链接文件)。该 innodb_directories选项现在支持查找在数据目录之外创建的表空间文件。
    通过此更改,.isl不再支持通过手动修改文件来移动服务器脱机时的远程表空间 。移动远程表空间文件现在由该innodb_directories选项支持 。请参见第15.7.7节“在服务器脱机时移动表空间文件”
  • 以下InnoDB文件格式配置选项已被删除:

    • innodb_file_format
    • innodb_file_format_check
    • innodb_file_format_max
    • innodb_large_prefix


    文件格式配置选项对于创建与InnoDBMySQL 5.1 早期版本兼容的表是必需的 。现在MySQL 5.1已经到了产品生命周期的末尾,这些选项不再需要。
    该FILE_FORMAT列从删除INNODB_TABLESINNODB_TABLESPACES信息架构表。
  • innodb_support_xa在XA事务中支持两阶段提交 的系统变量已被删除。InnoDB支持XA事务中的两阶段提交始终处于启用状态。
  • 对DTrace的支持已被删除。
  • 该JSON_APPEND()功能已被删除。JSON_ARRAY_APPEND()改为使用 。

本文来源于网友学习研究交流 www.caogen8.co,请以学习研究交流为主。
如果您没有贡献积分,可以直接免费领取,免费领取
如果你需要加入本学习研究交流,请以学习研究交流为目的,免责声明
如果找不到您要的资源,请搜索一下,点击搜索
返回列表 发新帖
 懒得打字嘛,点击右侧快捷回复【最新发布】   【赞助草根吧享更多权益】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

收藏帖子 返回列表 搜索

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

小黑屋|手机版|草根吧