1.新特性

  • 数据字典支持事务

8.0之前的数据字典都是Myisam存储引擎的,8.0改成使用Innodb存储引擎,也就是说,字典表也支持事务了。

  • DDL语句原子化

一条ddl语句会更新数据字典,操作存储引擎,写进binlog日志,将这三个步骤视为同一个原子性操作。

  • 升级程序

8.0之前安装新版本的mysql之后,mysql会在下次启动时自动更新数据字典表。现在,需要手动调用mysql_upgrade程序来升级mysql schema中的系统表,还有sys schema,user schema中类似的对象。

  • 安全以及账户管理

mysql schema中的权限表现在都变成innodb存储引擎了(之前是Myisam引擎)。之前并发创建用户或者删除用户可能部分用户会失败部分用户会成功,现在使用innodb存储引擎将会保证事务的一致性,要么全部成功,要么全部失败。
提供新的caching_sha2_password 认证插件,与sha256_password插件一样是使用的是sha256 哈希加密,但是不同的是,在链接时会使用缓存来解决延迟问题,并且支持更多的连接协议。对于基于RSA密钥对的密码的交换功能,不需要OpenSSL进行连接。caching_sha2_password与sha256_password插件比mysql_native_password插件提供了更安全的密码加密方式。caching_sha2_password比sha256_password插件提供了更好的性能,因此caching_sha2_password是默认的认证插件。
mysql8.0开始支持角色了(权限的集合)。角色可以被创建跟删除,可以被赋予权限跟回收权限,可以把角色授权给用户,也可以从用户那里回收角色。
mysql现在会维护密码的历史信息,在更改密码的时候,可以要求与之前的密码不能相同。mysql现在允许双密码,可以在应用切换密码的时候无需停机,对于那些频繁登录却失败的行为现在可以进行临时的锁定账户。
mysql8.0之前使用连接服务器时使用单个认证方法,在8.0.27之后,mysql支持多因素认证方法(multifactor authentication,MFA)。create user ,alter user 扩展到支持多认证方法。authentication_policy系统变量决定了是否使用MFA。客户端程序现在有了三个新的参数—password,—password2,—password3来指定多个密码。

  • 资源管理

    1. mysql现在允许创建和管理资源组,允许组内的分配线程去管理操作系统的资源。
  • 表的加密管理

default_table_encryption系统变量定义了对于新建的schema和普通表空间是否默认加密。在创建schema时可以指定DEFAULT ENCRYPTION 。

  • InnoDB增强

目前关于自增列的值是在每次变更后写到redo log中,并且在每次检查点时保存到存储引擎系统表中。服务器重启不会再影响已经设置的自增列的值。rollback操作后立即重启不会再使用分配给回滚事务的自增值。如果把表中自增列最大的值修改成更大的值,比如用update语句,这个值将会永久保存,下一次插入时的自增列将从修改完的值开始计算。
InnoDB memcached插件支持并发获取操作(在单个memcached 查询或者范围查询时)
新的动态变量,innodb_deadlock_detect,可以关闭死锁检测。在一个高并发系统中,当多个线程等待同一个锁时,死锁检测可能会降低性能。有时候关闭死锁检测,依赖innodb_lock_wait_timeout来回滚那些超时的事务,来防止死锁发生。
INFORMATION_SCHEMA.INNODB_CACHED_INDEXES 是新加的一张表,用来报告每个索引缓冲在innodb buffer pool中的index pages 的数量。
innodb 临时表现在在共享临时表空间中创建,ibtmp1。
innodb 表空间加密特征支持给undo与redo加密。
innodb在使用SELECT … FOR SHARE 和 SELECT … FOR UPDATE时,支持NOWAIT 跟SKIP LOCKED选项。NOWAIT会不管其他事务是否加锁,都会返回行。SKIP LOCKED会跳过被锁住的行。SELECT … FOR SHARE 代替SELECT … LOCK IN SHARE MODE 。但是SELECT … LOCK IN SHARE MODE 依然会保留,为了向前兼容,这两个语句是相等的。
使用ALTER TABLE 来ADD PARTITION, DROP PARTITION, COALESCE PARTITION, REORGANIZE PARTITION, REBUILD PARTITION 时支持使用ALGORITHM={COPY|INPLACE} 和 LOCK 子句。drop partition 加上algorithm=inplace时,即会删除分区中的数据,也会删除分区。
InnoDB存储引擎现在使用MYSQL 数据字典,而不是他存储引擎指定的数据字典。
mysql系统表和数据字典现在创建时会创建一个叫mysql.ibd的InnoDB表空间,之前这些表会独立的存储在mysql系统库中。
在mysql8.0中undo log在初始化时会创建两个undo 表空间,之前都是在系统表空间中。
在mysql8.0.14中,可以在运行时使用CREATE UNDO TABLESPACE 增加额外的undo表空间,使用DROP UNDO TABLESPACE 来删除,使用ALTER UNDO TABLESPACE 来设置是否可用。

CREATE UNDO TABLESPACE tablespace_name ADD DATAFILE 'file_name.ibu';
DROP UNDO TABLESPACE tablespace_name;
ALTER UNDO TABLESPACE tablespace_name SET {ACTIVE|INACTIVE};

information_schema.innodb_tablespace增加了一个state字段,表示表空间的状态。一个undo表空间的状态必须是空的才可以被删除。
innodb_undo_log_truncate 变量默认是打开的。
innodb_rollback_segments变量定义的回滚段是每个表空间占一个。之前这个变量的定义是mysql实例里总共的回滚段。
innodb_max_dirty_pages_pct_lwm 变量默认值是10。之前这个值是0,禁止预刷新到buffer pool。
innodb_max_dirty_page_pct 从75增加到90。脏页的百分比。
innodb_autoinc_lock_mode现在默认值是2(Interleaved)。交替锁模式允许并发插入,这样提高并发性与稳定性。在5.7中默认是基于语句的复制,那么lock_mode设置为自动增量锁定模式,确保对给定的SQL语句序列以可预测和可重复的顺序分配自动增量值,而基于行的复制对SQL语句的执行顺序不敏感。
重命名普通表空间可以使用alter tablespace … rename to语句。
新的innodb_dedicated_server变量,默认关闭,这个参数是为了mysql实例跑在独占服务器上而设计的。可以用来自动分配以下三个参数的内存:
innodb_buffer_pool_size
innodb_log_file_size
innodb_flush_method
information_schema.innodb_tablespace_brife视图提供了innodb的空间,名称,路径,标签,空间类型等字段。
zlib库的升级,从1.2.3升级到1.2.11。如果使用到InnoDB表的压缩,会使用到这个库。
InnoDB存储引擎现在支持原子性DDL,即使数据库宕机也会保证DDL全部提交或者全部回退。
在服务offline时表空间文件可以移动或者恢复。
对于redo log的优化:
用户线程可以并发写入而不用同步写入。
用户线程可以将脏页添加到刷新列表中。
现在一个专用的日志线程负责将日志缓冲区写入系统缓冲区,将系统缓冲区写到磁盘。
在8.0.12中undo log支持大对象数据的小更新,比如小于等于100bytes的更新。之前的情况是,LOB只有在用完一个LOB页之后才会更新。
在8.0.12之后,ALGORITHM=INSTANT支持以下的 alter table 选项:
增加一个列,
增加或删除一个虚拟列
增加或删除一个有默认值的列
修改EUM或者SET的枚举值
改变索引的类型
重命名表
ALGORITHM=INSTANT这个参数的作用是快速增加列,在线DDL操作都是秒级别的响应。
在8.0.13之后,TempTable存储引擎支持BLOB的列,之前临时表中有BLOB的列都是存储在磁盘上。
在8.0.13之后,InnoDB存储引擎支持普通表空间的加密,之前只有每个表独占一个表空间的表才能支持加密。可以在CREATE TABLESPACE,ALTER TABLESPACE时加上 ENCRYPTION语句。INFORMATION_SCHEMA.INNODB_TABLESPACE 现在增加了ENCRYPTION列来表示表空间是否加密。
禁用innodb_buffer_pool_in_core_file 变量,通过排除Innodb缓冲区的页来减少核心文件的大小。如果需要使用这个变量,需要core_file变量必须打开,且操作系统(linux 内核3.4之后)必须支持MADV_DONDUMP扩到到madvaise()。
在8.0.13之后,用户创建的临时表或者内部临时表,会存储在临时表空间分配给会话的临时表空间中。当会话断开时,临时表会被truncate且回收。之前的版本中,临时表会在全局临时表空间(ibtmp1)中,当临时表被删除时,并不会返还操作系统中的磁盘空间。innodb_temp_tablespace_dir变量定义了会话中临时表创建时的位置。默认位置是在数据目录中的#innodb_temp。innodb_session_temp_tablespae提供了会话临时表的元数据。全局临时表(ibtmp1)现在存储用户创建的临时表的回滚信息,是临时表的回滚段。
在8.014之后,Innodb支持并行索引读,这个可以提高check table 的性能。二级索引扫描并不能使用这个特征。如果想要使用这个特征,innodb_parallel_read_threads会话变量必须设置成比1大的值,默认值是4.
在8.0.14之后,当INNODB_DEDICATED_SERVER变量打开时,日志文件的大小以及数量会根据buffer pool的大小自动分配。之前,logfile的大小会自动分配,但是数量并不会自动分配。
在8.01.4之后,ALTER TABLESPACE语句可以使用ADD DATAFILE子句。如果创建表空间时没有指定datafile,那么会隐式创建一个名字。
在8.0.16之前,temptable_max_ram变量控制临时表的最大内存,临时表的数据如果超过了这个值,会把数据存到磁盘上。8.0.16之后,这个值由temptable_use_mmap控制。如果禁用temptable_use_mmap,内部临时表空间不足时将使用磁盘。
在8.0.17之后,innodb_parallel_read_threads变量可以控制并行读,最大值是256,如果超过这个值,那么将使用单线程去处理。这个变量对于大量的数据集会有作用。
在8.018引入了innodb_idle_flush_pct变量。控制在服务器空闲的时候刷新部分数据到磁盘。
在8.0.20中,双写buffer有专门的双写文件。之前的版本中,双写buffer是存储在系统表空间中。这有助于写等待,提高吞吐量,下面一些参数是配置双写buffer的:
innodb_doublewrite_dir 定义路径
innodb_doublewrite_files 定义数量
innodb_doublewrite_pages 定义批处理中每个线程写入的最大的页的个数
innodb_doublewrite_batch_size 定义批处理要写入的双写buffer的页的个数
在8.0.21中,提高了访问锁住表跟行的资源的并发性。
在8.0.21中,只有InnoDB的表才能在已知的数据目录外使用DATA DIRECTORY子句创建。这个改动是为了控制表空间数据文件的位置。
在8.0.21中,redo log可以使用ALTER INSTANCE {ENABLE|DISABLE} INNODB REDO LOG来或者关闭。关闭redo能提高性能,但不能保证数据的一致性。
在服务启动时,InnoDB会验证表空间文件的路径与数据字典中表空间的路径。innodb_validate_tablespace_paths这个变量在8.0.21中增加了,可以关闭路径验证。
在8.0.21中,如果是基于row格式的复制,那么create table … select 语句在binlog中会是一个事务。之前是把它拆分成两个事务,一个ddl,一个insert。
在一个繁忙的系统上对undo表空间执行truncate时会影响性能,因为将old undo表空间的数据从buffer pool刷新到新的undo 表空间上都是在磁盘上进行的。为了解决这个问题,flush操作被删除了。旧的撤销表空间的页会被动释放,或者在下一个检查点被删除。
在8.0.22中,新加了一个变量,innodb_extend_and_initialize。这个变量控制了InnoDB如何分配独占表空间与一般表空间的空间。默认情况下, 如果表空间不足,Innodb会自动分配页到表空间,并且写入null到这些页。如果频繁的添加页,这可能会影响性能。可以禁用这个参数,这将不会再写入null到page中。
在8.0.23中引入了temptable_max_mmap变量,这个变量控制了,因内存设置不足需要在磁盘上存储内部临时表数据之前,存储引擎允许从内存映射(MMAP)文件分配的最大内存量。
在8.0.23中引入了autoextend size选项。这个选项的作用是定义当表空间满时,自动扩展的大小。
在8.0.26中,新加了innodb_segment_reserve_factor系统变量。用来配置表空间文件保留百分之多少的空页。

  • 字符集支持

默认字符集从latin1改为utf8mb4。utf8mb4有了新的collation ,utf8mb4_ja_0900_as_cs。

  • JSON增强

  • 数据类型支持

在定义数据类型时,可以使用表达式来设置默认值。之前BLOB,TEXT,JSON,GEOMETRY数据类型都不支持表达式

  • 优化器

mysql现在支持隐式索引,默认情况下索引都是显示的。隐式索引不会被优化器使用,但是在其他方面与普通索引一样。在测试查询性能时,隐式索引可以帮助测试删除索引的影响。
支持倒序索引。
支持创建表达式值的索引
在8.0.14之后,那些where条件中存在常量比较的语句会在准备阶段会被移除,而不是到了优化器接端再移除。

原始语句:
SELECT * FROM t1 LEFT JOIN t2 ON condition_1 WHERE condition_2 OR 0 = 11
准备阶段
SELECT * FROM t1 LEFT JOIN t2 ON condition_1 where condition_21
优化器阶段:
SELECT * FROM t1 LEFT JOIN t2 WHERE condition_1 AND condition_21

在8.0.16之后,使用in的子查询可以转换成exists的子查询。
在8.0.17之后,not in ,还有not exists会转换成反连接。
在8.0.21之后,单个表的update或者delete可以使用半连接。举个例子:

UPDATE t1 SETt1.a=value WHERE t1.a IN(SELECT t2.a FROM t2) 

DELETE FROM t1 WHERE t1.a IN (SELECT t2.aFROM t2)

提高了hash join 的性能。

  • 通用表表达式(CTE)

使用with跟select语句来构建CTE,允许使用命名的临时结果集。

  • 窗口函数

开始支持窗口函数

  • 单个表的DELETE语句支持别名

在单个表的删除语句中支持使用别名

  • 正则表达式

之前使用的是REGEXP,RLIKE。现在使用的REGEXP_INSTR(),REGEXP_REPLACE(),REGEXP_SUBSTR().

  • 内部临时表

使用TempTable存储引擎代替memory存储引擎来创建内部临时表。TempTable支持varchar跟varbinrary数据类型。internal_tmp_mem_storage_engine变量定义了内部临时表的存储引擎,默认情况是TempTable,也可以设为memory。

  • 日志

错误日志现在使用mysql组件结构重写到文件。传统的错误记录是使用内置组件实现的,而使用系统日志的记录是作为可加载组件实现的。此外,还提供了一个可用的JSON日志编写器。可以使用log_error_services系统变量来指定使用哪种记录方式。

  • 备份锁

在在线备份期间,一个新的类型的备份锁来防止可能导致不一致的快照操作。新的备份锁支持LOCK INSTANCE FOR BACKUP 和UNLOCK INSTANCE的语法。这两个语句需要BACKUP ADMIN的权限。

  • 连接管理

mysql现在允许一个TCP/IP端口来配置指定的管理连接,即使max_connections的连接数已经建立。

  • 配置

mysql内主机名的最大长度是256个ASCII字符长度,之前是60个。不管是在连接的时候,还是在mysql系统库中,还是information_schema,performance_schema,还是show processlist中,都可以完整的显示。

  • 插件

之前的mysql插件是使用c,c++写的。现在只使用c++。

  • C API

MySQL C API现在支持与MySQL服务器进行非阻塞通信的异步函数。如果同步函数在读或者写是阻塞了,就必须等待。

  • 额外的casts目标类型

CAST()跟CONVERT()现在支持DOUBLE,FLOAT,REAL类型的数据。

  • JSON schema的验证

8.0.17增加了两个函数JSON_SCHEMA_VALID(),JSON_SCHEMA_VALIDATION_REPORT()验证JSON文件。

  • 多值索引

从8.0.17开始,InnoDB支持创建多个值的索引。

  • time zone隐藏设置

从8.0.17开始,使用SET VAR时会隐式设置会话的time zone变量。

  • Redo log的归档

从8.0.17开始,InnoDB开始支持redo 的归档。

  • 克隆插件

从8.0.17开始,提供克隆插件,允许克隆远端的InnoDB数据到本地。

  • Hash join的优化

从8.0.18开始,只要连接中包含一对等值连接,就会使用哈希连接。哈希连接不会使用索引,尽管它可以与仅应用于单表谓词的索引一起使用。哈希连接也可以在笛卡尔积中使用。

  • 查询转换注入

  • 支持timestamp跟datetime两种类型

  • 优化hint中的FORCE INDEX,IGNORE INDEX

group index 等同于force index for group by
no group index 等同于ignore index for group by
join index 等同于force index for join
no join index 等同于ignore index for join
order index 等同于force index for order by
no order index 等同于ignore index for order
index 等于group index+join index+order index 等于force index
no index 等于no group index+no join index +no order index等于ignore index
下面两个语句是相等的:

SELECT a FROM t1 FORCE INDEX (i_a) FOR JOIN WHERE a=1 AND b=2;

SELECT /*+ JOIN_INDEX(t1 i_a) */ a FROM t1 WHERE a=1 AND b=2;123
  • 用户备注与用户属性

从8.0.21开始,用户在创建或者更新的时候可以设置备注以及属性了。用户备注与用户属性都以JSON的格式存储,用户的属性可以在information_schema.user_attributes中看到。
例子:

mysql> CREATE USER 'mary'@'localhost' COMMENT 'This is Mary Smith\'s account';
Query OK, 0 rows affected (0.33 sec)

mysql> ALTER USER 'mary'@'localhost'
    -≫     ATTRIBUTE '{"fname":"Mary", "lname":"Smith"}';
Query OK, 0 rows affected (0.14 sec)

mysql> ALTER USER 'mary'@'localhost'
    -≫     ATTRIBUTE '{"email":"mary.smith@example.com"}';
Query OK, 0 rows affected (0.12 sec)

mysql> SELECT
    ->    USER,
    ->    HOST,
    ->    ATTRIBUTE->>"$.fname" AS 'First Name',
    ->    ATTRIBUTE->>"$.lname" AS 'Last Name',
    ->    ATTRIBUTE->>"$.email" AS 'Email',
    ->    ATTRIBUTE->>"$.comment" AS 'Comment'
    -> FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
    -> WHERE USER='mary' AND HOST='localhost'\G
*************************** 1. row ***************************
      USER: mary
      HOST: localhost
First Name: Mary
 Last Name: Smith
     Email: mary.smith@example.com
   Comment: This is Mary Smith's account
1 row in set (0.00 sec)12345678910111213141516171819202122232425262728
  • 新的优化器开关标志

系统变量optimizer_switch添加了两个新的标记。
prefer_ordering_index 默认情况下,对于order by 与group by语句都使用排序索引,可能有时会加强效率,但是有时降低效率。所以现在支持将prefer_ordering_index设置为off。
subquery_to_derived 当这个参数是on时,优化器会将符合条件的标量子查询转换成驱动表上的连接。

SELECT * FROM t1 WHERE t1.a > (SELECT COUNT(a) FROM t2) 会被重写成
SELECT t1.a FROM t1 JOIN ( SELECT COUNT(t2.a)AS c FROM t2 ) AS d WHERE t1.a > d.c.
  • XML增强

在8.0.21后,LOAD XML语句支持导入CDATA部分。

  • 支持截取年的部分

从8.0.22开始,cast()以及convert()函数可以截取出年,可以是两位数的年,也可以是四位数的年。

  • dump file 同步

从8.0.22开始,使用select into dumpfile和使用select into outfile语句时持久化,通过设置select_into_disk_sync系统变量等于on来实现。select_into_buffer_size可以控制缓存的大小,默认131072字节。额外的,也可以使用延迟同步,select_into_disk_sync_delay变量控制延迟同步时间,默认是0millsecond。

  • 只需要编写一次声明

从8.0.22开始,只需要编写一次声明,而不用每次执行前都要声明,在存储过程中也是这样。

  • right join 当作left join来处理

从8.0.22开始,在解析时就直接转换成left join。

  • 索引下推

从8.0.22开始,当有派生表时,会将驱动条件下推。举个例子:

SELECT * FROM (SELECT i, jFROM t1) AS dt WHERE i > constant
就会转换成
SELECT * FROM(SELECT i, j FROM t1 WHERE i > constant) AS dt

默认情况下,这个设置是开启的,optimizer_switch系统变量的derived_condition_pushdown标记可以控制这个行为。

  • 对于mysql的权限表,不再增加读锁

从8.0.22开始,为了并发对mysql权限表执行ddl,dml,读取权限表时需要行锁来实行,现在可以非锁定读。

  • 资源分配控制

从8.0.28开始,使用global_connection_memory可以看到用户执行查询时分配的内存,这个资源不包括root用户,也不包括innodb buffer之外的资源。可以使用gloabl_connection_memory_tracking=1来启用,默认是关闭的。可以使用connection_memory_chunk_size来控制间隔的时长。
可以为每个连接分配内存的限制:connection_memory_limit,只会影响以后的用户。
使用global_connection_memory_limit来限制所有的连接。

2.不推荐使用(废弃)的特性(可能在以后版本移除)

  • utf8mb3字符集将不再使用,推荐使用utf8mb4
  • ucs2,macroman,dec,hp8字符集将不再使用
  • 在8.0中默认使用的认证插件是caching_sha2_password,sha256_password就不再使用了。
  • alter tablespace与drop tablespace语句将不再支持ENGINE子句
  • SQL_MODE移除PAD_CHAR_TO_FULL_LENGTH
  • float与double不再支持auto_increment,建议转成int类型
  • float,double,decimal数据类型将不再支持unsigned字段属性,推荐使用简单的check约束来代替
  • float(M,D),double(M,D)语法因不支持标准mysql扩展将不再使用
  • numberic字段类型将不再可以使用zerofill属性
  • 之前的版本支持非标准短表达式,例如 character set latin1,character set ucs2.ASCII/UNICODE。这些将不在8.0.28中继续使用。使用时会报warning。
  • JSON_MERGE()函数被json_merge_preserve()代替
  • create temporary table的子句,tablespace=innodb_file_per_table 和tablespace=innodb_temporary将废弃。
  • flush hosts将废弃,可以使用truncate performance_schema.host_cache代替。
  • mysql_upgrade客户端程序将废弃,升级mysql系统库的能力已经移到MYSQL服务中
  • —no-dd-upgrade参数将废弃,
  • mysql_upgrade_info文件将废弃,这个文件用来创建数据字典以及恢复mysql 版本的
  • relay_log_info_file系统变量跟—master-info-file参数选项将废弃。8.0以后将默认存在表中
  • max_length_for_sort_data系统变量将废弃,优化器将不在选择这个
  • MYSQL_PWD 操作系统变量指定mysql密码将废弃。
  • insert … on duplicate key update使用values()也将废弃
  • 前缀索引不支持使用分区键现在也废弃了。
  • InnoDB memcached插件在8.0.22中废弃了
  • temptable_use_mmap变脸也废弃了
  • 对于BINARY的直接操作也废弃了,可以使用cast(… as binary)来代替
  • default_authentication_plugin变量在8.0.27中废弃了,之后的版本会使用authentication_policy代替

3.已删除的特性

  • innodb_locks_unsafe_for_binlog系统变量已删除,read commit隔离级别提供了类似的功能。
  • information_schema_stats变量删除了,由information_schema_stats_expiry代替
  • information_schema中InnoDB系统表重命名了(8.0.3): | Old Name | New Name | | —- | —- | | 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 |

  • 不可以再使用grant来创建用户了。使用grant来修改用户的权限,包括认证,ssl,资源限制也废弃了,需要使用create user或者alter user来实现。不可以再使用 SET PASSWORD … = PASSWORD()语法来修改密码。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)也删除了。
  • 数据字典提供了数据库对象的信息,找数据库时不再检查数据字典中路径名。—ignore-db-dir系统变量以及ignore_db_dirs选项废弃了
  • DDL log,也是元数据log移除了。从8.0.3开始由innodb_ddl_log表控制
  • tx_isolation跟tx_read_only移除了,使用transaction_isolation跟transaction_read_only来代替
  • sync_frm系统变量移除了,因为.frm文件没有了
  • secure_auth系统变量跟客户端参数—secure-auth移除了。
  • sql_log_bin的范围调整了,现在只有会话级别的,@@global.sql_log_bin不能再使用了
  • multi_range_count系统变量移除了
  • log_warnings系统变量跟—log-warnings服务器选项移除了,使用log_error_verbosity系统变量代替
  • metadata_locks_cache_size跟metadata_locks_hash_instances移除了
  • date_format,datetime_format,time_format,max_tmp_tables系统变量移除了
  • DB2, MAXDB, MSSQL, MYSQL323, MYSQL40, ORACLE, POSTGRESQL, NO_FIELD_OPTIONS, NO_KEY_OPTIONS, NO_TABLE_OPTIONS这些sql_mode移除了
  • group by 将不再提供排序功能,如果需要排序需要使用order by
  • explain语句将不再支持extend跟partitions关键字,因为默认就已经加了这两个关键字了
  • ecode()跟decode()函数移除了。encrypt()函数移除了,可以使用sha2()代替。—des-key-files选项have_crypt系统变量
  • 解析器不再将\N当成NULL的同义词,这个不会对LOAD DATA跟SELECT … INTO OUTFILE有影响
  • PROCEDURE ANALYSE()语法将不再支持
  • 客户端—SSL,—ssl-verify-server-cert 选项将移除。使用—ssl-mode=REQUIRED代替—ssl=1,使用—ssl-mode=DISABLED代替—ssl=0,—skip-ssl,—disable-ssl。使用—ssl-mode=VERIFY IDENTIFY代替—ssl-verify-server-cert选项。服务端的—ssl选项依旧可以使用。但是在8.0.26中废弃,可能在以后的版本中移除。
  • —temp-pool服务端选项废弃
  • ignore_builitin_innodb系统变量移除了
  • 支持分区的两个存储引擎,innodb与ndb。show plugin与information_schema.plugins都不能再看到分区的信息了。如果升级到8.0时有分区表且存储引擎不是innodb,要么删除分区,要么将表改为innodb。
  • information_schema库中将不再记录系统变量以及状态变脸的值了。GLOBAL_VARIABLES, SESSION_VARIABLES, GLOBAL_STATUS, SESSION_STATUS这些表被删除了。使用相关的performance_schema表来代替。
  • performance_timers表被删除了。
  • libmysqld嵌入库也被删除了,随之删除的还有:

mysql_config —libmysqld-libs,—embedded-libs和—embedded选项
mysqltest —embedded-server,—server-arg,—server-files选项
mysqltest_embedded跟mysql_client_test_embedded程序

  • mysql plugin功能也被移除了,要加载插件,可以使用—plugin-add跟—plugin-load-add选项或者运行时使用install plugin语句来安装
  • resolveip功能也被移除了,可以使用nslookup,host,dig来代替
  • resolve_stack_dump功能被移除了,
  • 一些error代码被移除了
  • information_schema_innodb_locks跟innodb_lock_waits表被移除了。使用performance_schema中的data_lock和data_lock_waits来代替
  • Innodb不再支持对临时表的压缩
  • innodb_file_format,innodb_file_format_check,innodb_file_format_max,innodb_large_prefix变量将不再使用,这些变量在5.1之前非常有用,之后就不再需要了
  • innodb_support_xa系统变量移除了。
  • json_append()函数移除了,使用json_array_append()来代替。
  • 8.0.13之后将不再支持将分区表放到共享表空间内
  • innodb_undo_logs变量移除了,innodb_rollback_segments变量实现了他的功能。
  • innodb_available_undo_logs状态变量被移除了
  • 在8.0.14之后innodb_undo_tablespaces变量不可再配置,
  • alter table … upgrade partitions语句移除了
  • internal_tmp_disk_storage_engines 系统变量移除了,磁盘上的内部临时表现在使用innodb存储引擎。