MySQL8已经发布了较长一段时间了,但是大多数企业还在使用着5.x的版本,其中原因一来是因为5.x版本功能稳定,升级也需要一定的成本,另外一方面很多开发者对于MySQL8新版本的特性还不够了解,本文就一起来看看MySQL8的新特性。
1、数据字典
MySQL8集成了一个事务型的数据字典,用于存储数据库对象信息。在MySQL8的版本之前,数据字典被存储在元数据文件和非事务型的表中,对应的有.frm和.opt这些文件,而在MySQL8中这些文件都被删除了。
2、原子DDL
原子DDL语句将数据字典更新、存储引擎操作和与DDL操作相关联的二进制日志的写入组合成一个单独的原子事务。
3、升级过程
MySQL8以前,在安装了一个新版本的MySQL以后需要DBA手工调用mysql_upgrade升级mysql数据库、sys数据库等数据库中的系统表,之后MySQL Server会在下次启动的时候自动更新数据字典表。
MySQL8.0.16以后,在安装新版本以后将会在下次启动时自动更新数据字典表,不再依赖于DBA手工调用mysql_upgrade。
4、安全和账号管理
- mysql数据库中的授权表的存储引擎从MyISAM修改为了InnoDB,这意味着其从不支持事务变成了支持事务。在之前的版本,多个用户授权操作可能有一些成功,有一些失败,但是却无法明确哪个成功,哪个失败。
在使用了InnoDB存储引擎以后,整体操作是事务性质的,要么成功并且写入binlog,要么失败全部回滚。 - 提供了一个新的认证插件caching_sha2_password,它实现了SHA-256密码哈希,并且使用了缓存减少了延迟。它还支持众多的传输协议,并且不需要针对OpenSSL进行链接以实现基于RSA密钥对密码交换功能。
caching_sha2_password和sha256_password插件的安全性比mysql_native_password插件更好,并且caching_sha2_password的性能比sha256_password更好,因此目前更加建议使用caching_sha2_password,并且最新版本的默认认证插件也是caching_sha2_password,而不再是mysql_native_password。 - MySQL8企业版SASL LDAP认证插件支持Linux下的GSSAPI/Kerberos认证。Linux下应用使用Microsoft Active Directory实现LDAP,默认支持Kerberos。
- MySQL8支持角色配置,代表一系列权限的集合
5、字符集
默认的字符集由latin1变成了utf8mb4。
6、参数修改持久化
MySQL 8版本支持在线修改全局参数并持久化,设置时通过persist关键字,其实质是将配置参数放置在了一个新生成的mysqld-auto.cnf配置文件中,一旦MySQL重启会去读取这个配置文件,这个配置文件的优先级高于默认的配置文件,从而实现参数修改的持久化,如:
set persist max_connections=12000;
7、JSON增强
MySQL8大幅增加了对于JSON的支持,新增了JSON_EXTRACT()、JSON_ARRAYAGG()和JSON_OBJECTAGG()等函数,这些函数支持JSON的分组和聚合,支持从JSON中提取数据,非常的方便。
8、数据类型支持
MySQL8提供了对于GIS的支持,这包括了空间参考系统(SRS)的元数据支持,以及SRS感知空间数据类型,还支持在空间数据类型上创建空间索引。
9、性能
经过验证,MySQL8具有更好的读写工作负载能力,与MySQL 5.7相比,在高负载上性能提高了2倍以上。特别值得一提的是在MySQL8中引入了资源组的功能,通过将用户线程映射到CPU,为用户提供了针对特定硬件上的特定工作负载进行优化的能力。
MySQL8是Oracle下了大力气的产品,功能十分丰富,对于MySQL也有了很大的改进,除了以上提出的还有很多小点的新功能或优化,其更新的速度比较快,一般1-3个月就会发布一个新版本,可以看出Oracle对于十分看重,并且社区的评价也非常不错,值得升级一试。