以下特性已经被添加到MySQL 8.0:
数据字典。MySQL现在包含一个事务数据字典存储数据库对象的信息。在以前的MySQL版本中,字典数据是存储在元数据文件和nontransactional表。有关更多信息,请参见Chapter14,MySQL数据字典.
原子(原子DDL)数据定义语句。原子DDL语句结合了数据字典更新、存储引擎操作,和二进制日志写与DDL操作成一个单一的原子事务。有关更多信息,请参见Section13.1.1,“原子数据定义语句支持”.
安全性和帐户管理。这些增强功能被添加到提高安全性,使更大的DBA灵活性在账户管理:
一个新的 caching_sha2_password身份验证插件可用。就像 sha256_password插件, caching_sha2_password实现了sha - 256密码散列,但是在连接时使用缓存来解决延迟问题。它还支持更多的连接协议,不需要连接对OpenSSL RSA密钥pair-based密码交换功能。看到Section6.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现在支持角色,权限的命名集合。可以创建和删除角色。角色可以有特权授予和撤消。角色可以授予和撤消的用户帐户。适用的积极角色的账户可以从其中选择授予账户,并在练习过程中可以改变帐户。有关更多信息,请参见Section6.3.4”,使用角色“.
MySQL现在维护密码历史信息,使限制重用以前的密码。dba可以要求新密码不被选择从先前的一些密码更改密码或一段时间。可以建立password-reuse全球政策以及每次的基础上。连同现有的密码过期功能需要定期修改密码,新密码历史功能提供dba更加完全控制密码管理。有关更多信息,请参见Section6.3.8,“密码管理”.
资源管理。MySQL现在支持资源组的创建和管理,和许可分配线程运行在服务器特定的组,这样线程执行根据可用的资源。组属性使控制其资源,启用或限制资源消耗的线程组。dba可以修改这些属性,适合不同的工作负载。目前,CPU时间是可管理的资源,所代表的概念的 “虚拟CPU”作为一个术语,包括CPU核,核,硬件线程,等等。服务器在启动时决定多少虚拟cpu,以适当的权限和数据库管理员可以将这些cpu资源组和分配线程组。有关更多信息,请参见Section8.12.5,“资源组”.
InnoDB增强。这些 InnoDB添加了增强:
当前最大自动递增计数器值写入重做日志每次值变化,并保存到一个engine-private系统表在每个检查站。这些变化使当前最大自动递增计数器值持续在服务器重启。另外:
服务器重启不再取消的影响 AUTO_INCREMENT = N表选择。如果你自动递增计数器进行初始化到一个特定的值,或者如果你改变自动递增计数器值为更大的值,在服务器重启保存新值。
服务器重启后立即 ROLLBACK操作不再重用的结果自动递增值分配给回滚事务。
如果你修改一个 AUTO_INCREMENT列值值大于当前最大的自动递增值(在一个 UPDATE操作,例如),保存新值,随后 INSERT业务分配自动递增值从新的开始,更大的价值。
有关更多信息,请参见Section15.8.1.5,“InnoDB AUTO_INCREMENT处理”,InnoDB AUTO_INCREMENT计数器初始化.
当遇到索引树腐败, InnoDB将腐败国旗写入重做日志,使腐败国旗碰撞安全。 InnoDB也写到内存中腐败国旗engine-private系统数据表在每个检查站。在恢复期间, InnoDB读取腐败旗帜位置和合并结果之前将内存中的表和索引对象标记为腐败。
的 InnoDB memcached插件支持多个 get操作(抓取多个在一个键/值对 memcached查询)和范围查询。看到Section15.19.4”,InnoDB memcached多个和范围查询支持”.
一个新的动态配置选项, innodb_deadlock_detect,可用于禁用死锁检测。在高并发系统中,死锁检测可能导致经济放缓时大量线程等待相同的锁。有时,它可能是更有效的禁用死锁检测和依赖 innodb_lock_wait_timeout设置事务回滚时发生死锁。
�� INFORMATION_SCHEMA.INNODB_CACHED_INDEXES表索引页面缓存的数量报告 InnoDB为每个索引缓冲池。
所有 InnoDB现在临时表中创建共享临时表空间, ibtmp1.
的 InnoDB表空间加密功能支持加密的重做日志和undo日志数据。看到重做日志数据加密,Undo日志数据加密.
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,的 tbl_name选项。看到Section13.2.10”,选择语法”.
的 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数据字典,而不是自己的存储引擎特定的数据字典。数据字典的信息,请参阅Chapter14,MySQL数据字典.
mysql系统表和数据字典表中创建一个 InnoDB表空间文件命名 mysql.ibd在MySQL数据目录中。以前,在个人创建这些表 InnoDB表空间文件 mysql数据库目录。
以下撤消表空间变化介绍了MySQL 8.0:
撤消表空间的数量现在可以在运行时被修改,或重新启动服务器时,使用 innodb_undo_tablespaces配置选项。这种变化允许撤消表空间和回滚段随着数据库的发展。
innodb_undo_log_truncate默认情况下是启用的。看到Section15.7.9,“删除撤消表空间”.
的 innodb_undo_tablespaces改变了默认值从0到2,这意味着回滚段中创建两个单独的撤消表空间,而不是 InnoDB系统默认的表空间。需要至少两个撤消表空间允许截断undo日志。
最低 innodb_undo_tablespaces值是2,设置 innodb_undo_tablespaces0是不允许的。2的最小值可以确保撤消表空间中创建回滚段总是相反的系统表空间。有关更多信息,请参见Section15.7.8,“撤消表空间配置”.
用于撤消表空间文件命名约定改变撤销NNN来undo_NNN,在那里 NNN是撤销空间数量。
的 innodb_rollback_segments配置选项定义了每个撤消表空间的回滚段数。在此之前, innodb_rollback_segments是一个全球设置指定的回滚段的总数为MySQL实例。这种变化增加的数量可用于并发事务回滚段。回滚段增加并发事务的可能性使用单独的回滚段undo日志,导致更少的资源争用。
的 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默认设置反映了变化从statement-based复制行基于MySQL 5.7中复制作为默认复制类型。Statement-based复制需要连续自动递增锁定模式(之��的违约),确保自动递增值被分配在一个可预见的和可重复的订单对于一个给定的SQL语句序列,而基于行的复制不敏感的SQL语句的执行顺序。有关更多信息,请参见InnoDB AUTO_INCREMENT锁模式.
对于使用statement-based复制的系统,新的 innodb_autoinc_lock_mode默认设置可能会破坏应用程序依��于顺序自动递增值。恢复之前的违约,集 innodb_autoinc_lock_mode为1。
重命名表空间支持 ALTER TABLESPACE ... RENAME TO语法。
�� innodb_dedicated_server配置选项,禁用默认情况下,可以使用 InnoDB自动配置以下选项根据检测到服务器上的内存数量:
innodb_buffer_pool_size
innodb_log_file_size
innodb_flush_method
此选项用于MySQL服务器实例运行在一个专用的服务器。有关更多信息,请参见Section15.6.13,“启用自动配置专用的MySQL服务器”.
�� INFORMATION_SCHEMA.INNODB_TABLESPACES_BRIEF视图提供了空间、名称、路径,国旗,和空间数据类型 InnoDB表空间。
的zlib库版本与MySQL从绑定版本1.2.3 1.2.11版。MySQL的帮助下实现了压缩zlib库。
如果你使用 InnoDB压缩表,请参阅Section2.10.1.2,“改变影响升级MySQL 8.0”相关升级的影响。
序列化的字典(SDI)存在于所有的信息 InnoDB表空间文件除了临时表空间和撤消表空间文件。SDI是序列化的元数据表和表空间对象。SDI数据提供元数据冗余的存在。例如,字典对象元数据可以从表空间文件如果数据字典变得不可用。SDI执行提取使用 ibd2sdi工具。SDI数据存储 JSON格式。
SDI表空间中的数据文件的包含表空间增加文件大小。一个SDI记录需要一个索引页,默认大小是16 k。然而,SDI数据压缩存储时减少存储足迹。
的 InnoDB存储引擎现在支持原子DDL,确保DDL操作要么全部提交或回滚,即使服务器期间暂停操作。有关更多信息,请参见Section13.1.1,“原子数据定义语句支持”.
表空间文件可以移动或恢复到一个新的位置,而服务器离线使用 innodb_directories选择。有关更多信息,请参见Section15.7.7“移动表空间文件,而服务器离线”.
字符集的支持。默认字符集已经改变了 latin1来 utf8mb4。的 utf8mb4字符集有几个新的排序,包括 utf8mb4_ja_0900_as_cs,第一个日本在MySQL特定于语言的排序规则用于Unicode。有关更多信息,请参见Section10.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条款。有关更多信息,请参见的描述符,以及Section12.16.8,“JSON路径语法”.
添加了两个JSON聚合函数 JSON_ARRAYAGG()和 JSON_OBJECTAGG(). JSON_ARRAYAGG()需要一个列或表达式作为它的参数,和聚合为一个单一的结果 JSON数组中。表达式可以计算任何MySQL数据类型;这并不需要 JSON价值。 JSON_OBJECTAGG()以两列或表达式它解释为一个键和一个值;它返回的结果作为一个单独的 JSON对象。的更多信息和示例,请参阅Section12.18,“总(集团)函数”.
添加JSON效用函数 JSON_PRETTY(),输出一个现有的 JSON值在一个易读的格式;每一个JSON对象成员或数组值可在单独的行上,和一个孩子对象或数组的目的是对其母2空间。
这个函数也适用于一个字符串,可以作为一个JSON解析值。
更详细的信息和示例,请参阅Section12.16.7,“JSON效用函数”.
当排序 JSON值在一个查询中使用 ORDER BY,现在每个值代表一个可变长度排序键的一部分,而不是一个固定1 k大小的一部分。在许多情况下,这可以减少过度使用;例如,一个标量 INT甚至 BIGINT价值实际上需要很少的字节,所以这个空间的剩余部分(90%或更多)被填充了。这种变化对性能有以下好处:
排序缓冲区空间现在更有效地使用,所以filesorts不需要刷新到磁盘早或经常与固定长度的排序键。这意味着更多的数据可以在内存中进行,避免不必要的磁盘访问。
短键可以比时间更快的相比,提供显著的性能改善。这适用于各种执行完全在内存中以及从磁盘要求写作和阅读。
添加支持MySQL 8.0.2部分,就地更新的 JSON列值,这是更有效的比完全移除现有的JSON值和写一个新的地方,就像以前当更新任何完成的 JSON列。对于这个应用的优化,更新必须应用使用 JSON_SET(), JSON_REPLACE(),或 JSON_REMOVE()。无法添加新元素的JSON文档更新;文档中的值不能把更多的空间比以往的更新。看到JSON值的部分更新,详细讨论的需求。
部分更新的JSON文档可以写入二进制日志,占用更少的空间比记录完整的JSON文档。部分更新总是记录当statement-based复制使用。对于这个处理基于行的复制,您必须首先设置 binlog_row_value_options=PARTIAL_JSON;有关更多信息,请参见这个变量的描述。
添加JSON效用函数 JSON_STORAGE_SIZE()和 JSON_STORAGE_FREE(). JSON_STORAGE_SIZE()返回字节的存储空间使用的二进制表示JSON文档之前,任何部分更新(见以前的项目)。 JSON_STORAGE_FREE()显示剩余空间的数量在一个表列的类型 JSON部分更新后使用 JSON_SET()或 JSON_REPLACE();这是大于零的二进制表示新值小于前一个值。
这些函数也接受一个JSON文档的一个有效的字符串表示。对于这样一个值, JSON_STORAGE_SIZE()后返回空间使用的二进制表示转换为一个JSON文档。为一个变量包含的字符串表示一个JSON文档, JSON_STORAGE_FREE()返回零。函数产生一个错误如果它(非空)参数不能被解析为一个有效的JSON文档,和 NULL如果参数是 NULL.
的更多信息和示例,请参阅Section12.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值附加信息和例子。
添加一个JSON旨在符合合并功能RFC 7396. JSON_MERGE_PATCH()2日,当使用JSON对象,合并成一个JSON对象作为联盟成员的以下设置:
每个成员的第一个对象没有相同的关键成员在第二个对象。
每个成员的第二个物体没有拥有相同的关键成员在第一个对象,其价值并不是JSON null文字。
每个成员都有一个键存在于这两个对象,其值在第二个对象并不是JSON null文字。
作为这项工作的一部分, JSON_MERGE()功能已经更名为 JSON_MERGE_PRESERVE(). JSON_MERGE()仍然是公认的一个别名JSON_MERGE_PRESERVE()在MySQL 8.0中,但现在已经弃用,必须去除在未来版本的MySQL。
的更多信息和示例,请参阅Section12.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版本不兼容的更改,在那里 “第一次重复键胜”算法是在这样的情况下使用。
看到标准化、合并和Autowrapping JSON值为更多的信息和示例。
添加了 JSON_TABLE()在MySQL 8.0.4函数。这个函数接受JSON数据,并返回它作为关系表的指定列。
这个函数的语法JSON_TABLE(expr, path列 column_list)() alias),在那里 expr是一个表达式,返回JSON数据, path是一个JSON路径应用于源, column_list是一个列表的列定义。一个例子所示:
mysql > SELECT * - >从 - > JSON_TABLE( “一个”- >“[{:3,“b”:“0”},{“a”:“3”、“b”:“1”},{“b”,“a”:2:1 },{“a”:0 },{ b:[1,2]}]”, - >“$[*]”列( - > rowid ORDINALITY, - > - > xa INT存在路径“美元。” - > xb INT存在路径“美元。b”, - > - > sa VARCHAR(100)路径“美元。” - >某人VARCHAR(100)路径“美元。b”, - > - > ja JSON路径”美元。” - > jb JSON路径”美元。b” - >) 作为jt1 - >); + - - - - - - - - - - - - - + - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + + | rowid | xa | xb | sa |某人|是| | + - - - - - - - - - - - - - + - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + + | 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 |空| 0 | | NULL | 5 | 0 | 1 |空零零| | | |(1、2) + - - - - - - - - - - - - - + - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + +
JSON源表达式可以是任何表达式产生一个有效的JSON文档,包括一个JSON文本,一个表列,或一个函数调用返回JSON等JSON_EXTRACT(t1, data, ''''$.post.comments'''')。有关更多信息,请参见Section12.16.6,“JSON表函数”.
优化器。这些优化器增强补充道:
MySQL现在支持无形的索引。一个看不见的索引优化器使用的不是,但另有保持正常。默认索引是可见的。无形的索引可以测试删除索引对查询性能的影响,没有破坏性的改变,必须撤销该指数是必需的。看到Section8.3.12,“看不见的索引”.
现在MySQL支持降序索引: DESC在索引的定义不再是忽略但导致存储键值的降序排序。此前,索引可以在相反的顺序扫描,但性能损失。降序索引可以扫描顺序,这是更有效率。降序索引也使优化器使用多个列索引时最有效的扫描顺序和一些列的升序和降序排列。看到Section8.3.13,“降序索引”.
公共表表达式。MySQL现在支持公共表表达式,nonrecursive和递归。公共表表达式允���使用命名临时结果集,通过允许一个实现 WITH条款前 SELECT声明和其他某些语句。有关更多信息,请参见Section13.2.13”,语法(公共表表达式)”.
窗口函数。MySQL现在支持窗口功能,从查询,为每一行执行计算使用行相关行。这些包括等功能 RANK(), LAG(), NTILE()。此外,一些现有的聚合功能现在可以作为窗口函数;例如, SUM()和 AVG()。有关更多信息,请参见Section12.19,“窗口函数”.
正则表达式的支持。以前,MySQL用亨利·斯宾塞的正则表达式库来支持正则表达式运算符(REGEXP, RLIKE)。正则表达式支持使用国际组件重新实现了Unicode(ICU),它提供了完整的Unicode支持和多字节是安全的。的 REGEXP_LIKE()函数执行正则表达式匹配的方式 REGEXP和 RLIKE现在是同义词,函数的运营商。此外, REGEXP_INSTR(), REGEXP_REPLACE(), REGEXP_SUBSTR()函数可以找到匹配位置和执行子串替换和提取,分别。的 regexp_stack_limit和 regexp_time_limit系统变量提供匹配引擎控制资源消耗的。有关更多信息,请参见Section12.5.2,“正则表达式”。信息的方式使用正则表达式的应用程序可能会影响到实现改变,明白了正则表达式兼容性的考虑.
内部临时表。的 TempTable存储引擎取代了 MEMORY内存存储引擎作为默认引擎内部临时表。的 TempTable存储引擎提供了高效的存储VARCHAR和 VARBINARY列。的 internal_tmp_mem_storage_engine会话变量定义内存的存储引擎内部临时表。允许的值TempTable(默认) MEMORY。的 temptable_max_ram配置选项定义的最大内存 TempTable存储引擎可以使用之前的数据存储到磁盘。
日志记录。错误日志是重写使用MySQL组件体系结构。传统的错误日志记录是使用内置组件实现的,使用系统日志和日志记录被实现为一个可加载的组件。另外,一个可加载JSON日志作家是可用的。控制日志组件启用,使用 log_error_services系统变量。有关更多信息,请参见Section5.4.2,“错误日志”.
备份锁。一种新的备份锁允许DML在线备份期间,防止操作可能导致不一致的快照。新备份支持锁 LOCK INSTANCE FOR BACKUP和UNLOCK INSTANCE语法。的 BACKUP_ADMIN特权需要使用这些语句。
复制。增强了MySQL复制如下:
MySQL复制现在支持二进制日志部分更新的JSON文档使用二进制格式紧凑,节省空间的日志记录完整的JSON文档。这种紧凑的日志自动完成使用statement-based日志记录时,可以通过设置新启用 binlog_row_value_options系统变量 PARTIAL_JSON。有关更多信息,请参见JSON值的部分更新,以及描述 binlog_row_value_options.
弃用MySQL 8.0特性
弃用以下功能在MySQL 8.0和可能或将被删除在以后的系列。选择所示,应用程序应该被更新为使用它们。
对于使用MySQL 8.0特性弃用的应用程序已被移除在更高的MySQL系列中,语句可能会失败时复制从MySQL 8.0主higher-series奴隶,或对主人和奴隶可能有不同的影响。为了避免这些问题,使用功能在8.0应该弃用的应用程序修改,以避免他们,尽可能使用替代品。
MySQL 8.0.4, validate_password插件已经被重新实现使用服务器组件基础设施。的插件形式 validate_password仍然可用,但是弃用和MySQL的未来版本将被删除。MySQL使用插件的安装应使过渡到使用组件。看到Section6.5.3.3,“过渡到密码验证组件”.
的 ALTER TABLESPACE和 DROP TABLESPACE ENGINE条款是弃用。
的 JSON_MERGE()函数是MySQL 8.0.3弃用。使用 JSON_MERGE_PRESERVE()代替。
特性在MySQL 8.0删除
下列事项是过时的和MySQL 8.0中已被移除。选择所示,应用程序应该被更新为使用它们。
MySQL 5.7使用特性的应用程序移除在MySQL 8.0中,语句可能会失败当复制从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表统计数据。有关更多信息,请参见Section8.2.3”,优化INFORMATION_SCHEMA查询”.
代码与废弃 InnoDB系统表在MySQL 8.0.3移除。 INFORMATION_SCHEMA的观点的基础上 InnoDB系统表取而代之的是内部系统对数据字典表的看法。影响 InnoDB INFORMATION_SCHEMA观点被更名为:
Table1.1Renamed InnoDB信息模式的观点
旧的名称 新名字
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或后,更新任何参考之前的脚本 InnoDB INFORMATION_SCHEMA视图名称。
以下特性相关的账户管理已被移除:
使用 GRANT创建用户。相反,使用 CREATE USER。这种做法使 NO_AUTO_CREATE_USERSQL模式非物质的 GRANT语句,所以也被删除。
使用 GRANT修改账户属性以外的权限分配。这包括认证、SSL和资源属性。相反,建立这些属性在创建帐户 CREATE USER或修改他们之后 ALTER USER.
确认密码的hash_string''''语法 CREATE USER和 GRANT。相反,使用认同 auth_plugin为“hash_string''''为 CREATE USER和ALTER USER,那里的 ''''hash_string''''值是兼容的格式指定的插件。
此外,由于 IDENTIFIED BY PASSWORD语法已被删除 log_builtin_as_identified_by_password系统变量是多余的,被移除。
的 PASSWORD()函数。此外, PASSWORD()删除意味着设置密码……=密码(“auth_string'''')语法是不再可用。
的 old_passwords系统变量。
查询缓存被移除。删除包含这些项目:
的 FLUSH QUERY CACHE和 RESET QUERY CACHE语句。
这些系统变量: query_cache_limit, query_cache_min_res_unit, query_cache_size, query_cache_type,query_cache_wlock_invalidate.
这些状态变量: Qcache_free_blocks, Qcache_free_memory, Qcache_hits, Qcache_inserts, Qcache_lowmem_prunes,Qcache_not_cached, Qcache_queries_in_cache, Qcache_total_blocks.
这些线程状态: checking privileges on cached query, checking query cache fquery, invalidating query cache entries, sending cached result to client, storing result in query cache, Waiting fquery cache lock.
这些弃用查询缓存项仍弃用,但没有影响,并将未来的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_isolation和 transaction_read_only代替。
的 sync_frm已被删除,因为系统变量 .frm文件已经过时了。
的 secure_auth系统变量和 secure-auth客户选项已被移除。的 MYSQL_SECURE_AUTH选择 mysql_options()C API函数删除。
的 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 TABLE或 ALTER TABLE不再是作为吗 DATETIME.
未使用的 date_format, datetime_format, time_format, max_tmp_tables系统变量已被移除。
的 EXTENDED和 PARTITIONS关键字的 EXPLAIN声明已被移除。这些关键词是不必要的,因为他们的效果总是启用。
这些加密类物品已被移除:
的 ENCODE()和 DECODE()功能。
的 ENCRYPT()函数。
的 DES_ENCRYPT(), DES_DECRYPT()功能, des-key-file选项时, have_crypt系统变量, DES_KEY_FILE选择 FLUSH声明,HAVE_CRYPT CMake选择。
的加密功能:删除 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().
描述的功能Section12.15.4”功能,创建几何值WKB价值观”之前接受了WKB字符串或几何参数。几何参数不再允许并产生一个错误。看到部分迁移指南查询远离使用几何参数。
解析器不再处理 \N作为一个同义词 NULL在SQL语句。使用 NULL代替。
这个改变不影响文本文件导入或导出操作 LOAD DATA INFILE或 SELECT ... INTO OUTFILE, NULL继续为代表 \N。看到Section13.2.7,“数据加载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_REQUIRED或 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),所以应该有小剩余需要转换的当前版本的MySQL 5.0数据库名称。作为一个解决方案,升级一个MySQL 5.0安装MySQL 5.0之前升级到最新版本。
的 mysql_install_db程序已被删除从MySQL分布。数据目录应该通过调用执行初始化 mysqld与 initialize或 initialize-insecure选项。此外, bootstrap选择 mysqld这是使用的 mysql_install_db已经被移除, INSTALL_SCRIPTDIR CMake选项,安装位置的控制 mysql_install_db被移除。
通用分区处理程序已被删除从MySQL服务器。为了支持一个给定的分区表,表的存储引擎使用现在必须提供自己的(“本机”)分区处理程序。的partition和 skip-partition从MySQL服务器选项已被移除,不再partitioning-related条目中所示的输出 SHOW PLUGINS或在INFORMATION_SCHEMA.PLUGINS表。
目前两个MySQL存储引擎,提供本地分区支持InnoDB和 NDB;其中,只有 InnoDB在MySQL 8.0支持。任何试图创建分区表在MySQL 8.0使用任何其它存储引擎失败。
升级的影响。分区表的直接升级使用以外的存储引擎 InnoDB(如 MyISAM)从MySQL 5.7(或更早)不支持MySQL 8.0。有两种选择来处理这样一个表:
删除表的分区,使用 ALTER TABLE ... REMOVE PARTITIONING.
改变表的存储引擎使用 InnoDB, ALTER TABLE ... ENGINE=INNODB.
至少一个列出的两个操作就必须为每个分区非执行InnoDB表服务器升级到MySQL 8.0之前。否则,这样的表不能升级后使用。
因为表创建语句将导致分区表使用一个存储引擎没有分区的支持现在失败的错误(ER_CHECK_NOT_IMPLEMENTED),您必须确保任何声明在转储文件(例如,写的 ,mysqldump)从一个旧版本的MySQL,您希望导入一个MySQL 8.0服务器创建分区表还不指定一个存储引擎等 MyISAM没有本地分区处理程序。您可以通过执行以下:
删除任何引用分区 CREATE TABLE语句使用的价值 STORAGE ENGINE以外的选择 InnoDB.
指定的存储引擎 InnoDB,或允许 InnoDB作为表的默认存储引擎。
有关更多信息,请参见Section23.6.2”分区限制有关存储引擎”.
系统和状态变量信息不再是维护 INFORMATION_SCHEMA。这些表已被移除: GLOBAL_VARIABLES, SESSION_VARIABLES,GLOBAL_STATUS, SESSION_STATUS。使用相应的性能模式表。看到Section26.11.13,“性能模式系统变量表”,Section26.11.14,“性能模式状态变量表”。此外, show_compatibility_56系统变量被移除。它被用于过渡期间系统和状态变量信息 INFORMATION_SCHEMA表感动得性能模式表,不再是必要的。这些状态变量已被移除: Slave_heartbeat_period, Slave_last_heartbeat,Slave_received_heartbeats, Slave_retried_transactions, Slave_running。他们提供的信息是可用的性能模式表;看到迁移到性能模式系统变量和状态表.
性能模式 setup_timers表已被删除,如有 TICK行 performance_timers表。
的 libmysqld嵌入式服务器库已被删除,除了:
的 mysql_options() MYSQL_OPT_GUESS_CONNECTION, MYSQL_OPT_USE_EMBEDDED_CONNECTION,MYSQL_OPT_USE_REMOTE_CONNECTION, MYSQL_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_embedded和 mysql_client_test_embedded测试程序
的 mysql_plugin实用工具已被删除。备选方案包括在服务器启动时加载插件使用 plugin-load或 plugin-load-add选项,或者在运行时使用 INSTALL PLUGIN声明。
以下服务器错误代码不习惯和已被移除。应用程序测试专门为这些错误应该被更新。
ER_BINLOG_READ_EVENT_CHECKSUM_FAILURE
ER_BINLOG_ROW_RBR_TO_SBR
ER_BINLOG_ROW_WRONG_TABLE_DEF
ER_CANT_ACTIVATE_LOG
ER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTION
ER_CANT_CREATE_FEDERATED_TABLE
ER_CANT_CREATE_SROUTINE
ER_CANT_DELETE_FILE
ER_CANT_GET_WD
ER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFF
ER_CANT_SET_WD
ER_CANT_WRITE_LOCK_LOG_TABLE
ER_CREATE_DB_WITH_READ_LOCK
ER_CYCLIC_REFERENCE
ER_DB_DROP_DELETE
ER_DELAYED_NOT_SUPPORTED
ER_DIFF_GROUPS_PROC
ER_DISK_FULL
ER_DROP_DB_WITH_READ_LOCK
ER_DROP_USER
ER_DUMP_NOT_IMPLEMENTED
ER_ERROR_DURING_CHECKPOINT
ER_ERROR_ON_CLOSE
ER_EVENTS_DB_ERROR
ER_EVENT_CANNOT_DELETE
ER_EVENT_CANT_ALTER
ER_EVENT_COMPILE_ERROR
ER_EVENT_DATA_TOO_LONG
ER_EVENT_DROP_FAILED
ER_EVENT_MODIFY_QUEUE_ERROR
ER_EVENT_NEITHER_M_EXPR_NOR_M_AT
ER_EVENT_OPEN_TABLE_FAILED
ER_EVENT_STORE_FAILED
ER_EXEC_STMT_WITH_OPEN_CURSOR
ER_FAILED_ROUTINE_BREAK_BINLOG
ER_FLUSH_MASTER_BINLOG_CLOSED
ER_FORM_NOT_FOUND
ER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF__UNUSED
ER_FRM_UNKNOWN_TYPE
ER_GOT_SIGNAL
ER_GRANT_PLUGIN_USER_EXISTS
ER_GTID_MODE_REQUIRES_BINLOG
ER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LIST
ER_HASHCHK
ER_INDEX_REBUILD
ER_INNODB_NO_FT_USES_PARSER
ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR
ER_LOAD_DATA_INVALID_COLUMN_UNUSED
ER_LOGGING_PROHIBIT_CHANGING_OF
ER_MALFORMED_DEFINER
ER_MASTER_KEY_ROTATION_ERROR_BY_SE
ER_NDB_CANT_SWITCH_BINLOG_FORMAT
ER_NEVER_USED
ER_NISAMCHK
ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR
ER_NO_FILE_MAPPING
ER_NO_GROUP_FOR_PROC
ER_NO_RAID_COMPILED
ER_NO_SUCH_KEY_VALUE
ER_NO_SUCH_PARTITION__UNUSED
ER_OBSOLETE_CANNOT_LOAD_FROM_TABLE
ER_OBSOLETE_COL_COUNT_DOESNT_MATCH_CORRUPTED
ER_ORDER_WITH_PROC
ER_PARTITION_SUBPARTITION_ERROR
ER_PARTITION_SUBPART_MIX_ERROR
ER_PART_STATE_ERROR
ER_PASSWD_LENGTH
ER_QUERY_ON_MASTER
ER_RBR_NOT_AVAILABLE
ER_SKIPPING_LOGGED_TRANSACTION
ER_SLAVE_CHANNEL_DELETE
ER_SLAVE_MULTIPLE_CHANNELS_HOST_PORT
ER_SLAVE_MUST_STOP
ER_SLAVE_WAS_NOT_RUNNING
ER_SLAVE_WAS_RUNNING
ER_SP_GOTO_IN_HNDLR
ER_SP_PROC_TABLE_CORRUPT
ER_SQL_MODE_NO_EFFECT
ER_SR_INVALID_CREATION_CTX
ER_TABLE_NEEDS_UPG_PART
ER_TOO_MUCH_AUTO_TIMESTAMP_COLS
ER_UNEXPECTED_EOF
ER_UNION_TABLES_IN_DIFFERENT_DIR
ER_UNSUPPORTED_BY_REPLICATION_THREAD
ER_UNUSED1
ER_UNUSED2
ER_UNUSED3
ER_UNUSED4
ER_UNUSED5
ER_UNUSED6
ER_VIEW_SELECT_DERIVED_UNUSED
ER_WRONG_MAGIC
ER_WSAS_FAILED
弃用的 INFORMATION_SCHEMA INNODB_LOCKS和 INNODB_LOCK_WAITS表已被移除。使用性能模式 data_locks和data_lock_waits表。
请注意
在MySQL 5.7中, LOCK_TABLE列 INNODB_LOCKS表和 locked_table列 sys模式 innodb_lock_waits和x$innodb_lock_waits视图包含组合模式/表名称的值。在MySQL 8.0中, data_locks表和 sys模式视图包含不同的模式名称和表名称列。看到Section27.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不再产生 .isl文件(InnoDB符号链接文件)在创建表空间数据文件之外的MySQL数据目录。的 innodb_directories选择现在支持定位数据目录之外的表空间创建的文件。
这种变化,移动远程表空间在服务器离线手动修改一个 .isl文件不再支持。移动远程表空间文件现在是支持的 innodb_directories选择。看到Section15.7.7“移动表空间文件,而服务器离线”.
以下 InnoDB文件格式的配置选项删除:
innodb_file_format
innodb_file_format_check
innodb_file_format_max
innodb_large_prefix
创建表的文件格式配置选项是必要与早期版本的兼容 InnoDB在MySQL 5.1。现在MySQL 5.1已达到其产品生命周期的结束,不再需要这些选项。
的 FILE_FORMAT列被撤 INNODB_TABLES和 INNODB_TABLESPACES信息架构表。
的 innodb_support_xa系统变量,这使得在XA事务支持两阶段提交,被删除。 InnoDB在XA事务支持两阶段提交总是启用。
DTrace支持被移除。
的 JSON_APPEND()函数被移除。使用 JSON_ARRAY_APPEND()代替。