注意:
仅支持通过使用 in-place 方式从 MySQL 5.7 升级到 MySQL 8.0 升级; 不支持从 MySQL 8.0 降级到 MySQL 5.7(或从MySQL 8.0 版本降级到任意一个更早的 MySQL 8.0 版本)。唯一受支持的替代方案是在升级之前对数据进行备份。
MySQL8.0相对于MySQL5.7新特性
1、字符集支持:utf8mb4 作为 MySQL 的默认字符集,此字符集可支持emoji表情
2、系统库优化:默认采用utf8mb4字符集,取消默认MyISAM系统表,新加KEYWORDS表
3、取消Query Cache:性能审计中建议的第一件事就是禁用Query Cache,因为它给设计带来了很多麻烦。MySQL QC造成的问题比它解决问题要多的多。如果必须需要Query Cache,MySQL8.0可能不太适用。
4、角色管理:MySQL 8.0中添加了SQL角色功能,角色是指定的拥有特定权限的集合,像用户帐户一样,角色可以拥有授予和撤消的权限。
5、隐藏索引:在 MySQL8.0中,索引可以被“隐藏”和“显示”。当对索引进行隐藏时,它不会被查询优化器所使用。我们可以使用这个特性用于性能调试,例如我们先隐藏一个索引,然后观察其对数据库的影响。如果数据库性能有所下降,说明这个索引是有用的,然后将其“恢复显示”即可;如果数据库性能看不出变化,说明这个索引是多余的,可以考虑删掉。
6、降序索引:MySQL8.0之前如果有desc,索引会以相反顺序扫描,影响性能。也可以混合某些列的升序和某些列的降序使用多列索引。
alter table T1 add index idx_1(c1 DESC);
7、设置持久化:新增了 SET PERSIST 命令,将修改的参数配置保存到数据目录下的 mysqld-auto.cnf文件中,下次启动时会读取该文件,用其中的配置来覆盖缺省的配置文件。
8、通用表表达式(Common Table Expressions)
复杂查询:
SELECT T1.*,T2.* FROM
(SELECT COL1 FROM TABLE1) T1,
(SELECT COL2 FROM TABLE2) T2;
而有了GTE,就可以这样写了:
WITH
T1 AS (SELECT COL1 FROM TABLE1),
T2 AS (SELECT COL2 FROM TABLE2)
SELECT T1.*,T2.* FROM T1,T2;
9、窗口函数(Window Functions):从MySQL8.0开始,新增了一个叫窗口函数的概念,它可以用来实现若干新的查询方式。窗口函数与 SUM()、COUNT() 这种集合函数类似,但它不会将多行查询结果合并为一行,而是将结果放回多行当中。即窗口函数不需要 GROUP BY。
10、原子DDL:InnoDB 现在支持表 DDL 的原子性,也就是 InnoDB 表上的 DDL 也可以实现事务完整性,要么失败回滚,要么成功提交,不至于出现 DDL 时部分成功的问题,此外还支持 crash-safe 特性,元数据存储在单个事务数据字典中。
11、NoSQL(用的不多):MySQL从5.7版本开始提供NoSQL存储功能,目前在8.0版本中这部分功能也得到了更大的改进。该项功能消除了对独立的NoSQL文档数据库的需求,而 MySQL 文档存储也为schema-less模式的JSON文档提供了多文档事务支持和完整的ACID合规性。
12、JSON:MySQL 8.0大幅改进了对JSON的支持,添加了基于路径查询参数从JSON字段中抽取数据的JSON_EXTRACT()函数,以及用于将数据分别组合到 JSON 数组和对象中的JSON_ARRAYAGG()和JSON_OBJECTAGG()聚合函数。
13、安全性:对OpenSSL的改进、新的默认身份验证、SQL 角色、密码强度、授权。
14、临时表改进:在5.7以来,所有内部临时表成为"ibtmp1"的共享表空间。此外临时表的元数据也存储在内存中。在MySQL8.0中,MEMORY存储引擎也将被TempTable存储引擎替换为内部临时表的默认存储引擎。这个新引擎VARCHAR和VARBINARY列提供更高效的存储空间。
15、Redo重构:重新设计了redo log,改进fsync,使效率更高,减少锁,优化flush机制,不会频繁flush,同时支持高并发度。
16、直方图:在MySQL 8.0中添加了直方图概念,用于索引的统计和分析
17、Innodb加强:数据字典优化,参数优化
18:复制优化:在MySQL8.0中,对于复制的改进,默认参数的修改、对组复制,增加了“动态跟踪、调试日志”等更多性能方面的监控工具。提高了可观察性,提供了复制的效率(基于WRITESET的并行复制)
接下来开始测试……