MySQL 主流版本更新记录
做技术,经常说要跟踪最新的技术前沿知识,不断学习,掌握新技术。
那么,如何高效、快速的跟踪最新技术潮流呢?
1)跟踪技术栈的最新版本的知识更新点
2)跟踪行业巨头的技术博客、技术分享
3)在自己的项目实践中,应用新技术、并总结
本文抛砖引玉,介绍MySQL主流版本的更新内容
MySQL 主流版本更新记录
MySQL 官网: https://www.MySQL.com/downloads/
MariaDB 官网:https://mariadb.org/download/
MySQL 是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,已被Oracle收购,现属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL 是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。
MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
MySQL 和 MariaDB 区别
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。
开发MariaDB这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。
MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的开源、免费的代替品。
MariaDB由MySQL的创始人麦克尔·维德纽斯主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。
MariaDB名称来自麦克尔·维德纽斯的女儿玛丽亚(英语:Maria)的名字。
MariaDB直到5.5版本,均依照MySQL的版本。
因此,使用MariaDB5.5的人会从MySQL5.5中了解到MariaDB的所有功能。
从2012年11月12日起发布的10.0.0版开始,不再依照MySQL的版号。
10.0.x版以5.5版为基础,加上移植自MySQL 5.6版的功能和自行开发的新功能。
在存储引擎方面,10.0.9版起使用XtraDB(名称代号为Aria)来代替MySQL的InnoDB。
MariaDB的API和协议兼容MySQL,另外又添加了一些功能,以支持本地的非阻塞操作和进度报告。
这意味着,所有使用MySQL的连接器、程序库和应用程序也将可以在MariaDB下工作。
在此基础上,由于担心甲骨文MySQL的一个更加封闭的软件项目,Fedora的计划在Fedora 19中的以MariaDB取代MySQL
1、MySQL各版本对比
截止到2020年2月5日,MySQL更新到了 MySQL 8.0.19
MySQL | Percona MySQL | Maria DB | |
---|---|---|---|
服务器特性 | 开源 | 开源 | 开源 |
支持分区表 | 支持分区表 | 支持分区表 | |
InnoDB | XtraDB | XtraDB | |
企业版监控工具 社区版不提供 |
Percon Monitor 工具 | Monyog | |
高可用特性 | 基于日志点复制 | 基于日志点复制 | 基于日志点复制 |
基于Gtid复制 | 基于Gtid复制 | 基于Gtid复制 | |
MGR | MGR & PXC | Galera Cluster | |
MySQL Router | Proxy SQL | MaxScale | |
安全特性 | 企业版防火墙 | ProxySQL FireWall | MaxScale FireWall |
企业版用户审计 | 审计日志 | 审计日志 | |
用户密码生命周期 | 用户密码生命周期 | - | |
sha256_password caching_sha2_password |
sha256_password caching_sha2_password |
sha256_password ed25519 |
2、决定MySQL进行升级前要考虑什么?
升级必须可以给业务带来益处
升级可能给业务带来不好的影响
制定数据库升级方案
制定升级失败回滚方案
MySQL 5.5
InnoDB代替MyISAM成为MySQL默认的存储引擎;
多核扩展,能更充分地使用多核CPU;
InnoDB的性能提升,包括支持索引的快速创建,表压缩,I/O子系统的性能提升,PURGE操作从主线程中剥离出来,Buffer Pool可拆分为多个Instances;
半同步复制;
引入utf8mb4字符集,可用来存储emoji表情;
引入metadata locks(元数据锁);
分区表的增强,新增两个分区类型:RANGE COLUMNS 和 LIST COLUMNS;
MySQL企业版引入线程池;
可配置IO读写线程的数量(innodb_read_io_threads,innodb_write_io_threads)。在此之前,其数量为1,且不可配置;
引入innodb_io_capacity选项,用于控制脏页刷新的数量。
MySQL 5.6
该版本是MySQL历史上一个里程碑式的版本,这也是目前生产上应用得最广泛的版本。
GTID复制;
无损复制;
延迟复制;
基于库级别的并行复制;
MySQL binlog可远程备份binlog;
对TIME, DATETIME和TIMESTAMP进行了重构,可支持小数秒。DATETIME的空间需求也从之前的8个字节减少到5个字节;
Online DDL。ALTER操作不再阻塞DML;
可传输表空间(transportable tablespaces);
统计信息的持久化。避免主从之间或数据库重启后,同一个SQL的执行计划有差异;
全文索引;
InnoDB Memcached plugin;
EXPLAIN可用来查看DELETE,INSERT,REPLACE,UPDATE等DML操作的执行计划,在此之前,只支持SELECT操作;
分区表的增强,包括最大可用分区数增加至8192,支持分区和非分区表之间的数据交换,操作时显式指定分区;
Redo Log总大小的限制从之前的4G扩展至512G;
Undo Log可保存在独立表空间中,因其是随机IO,更适合放到SSD中。但仍然不支持空间的自动回收;
可dump和load Buffer pool的状态,避免数据库重启后需要较长的预热时间;
InnoDB内部的性能提升,包括拆分kernel mutex,引入独立的刷新线程,可设置多个purge线程;
优化器性能提升,引入了ICP,MRR,BKA等特性,针对子查询进行了优化。
MySQL 5.7
3倍更快的性能;
InnoDB 相关改进;
新的优化器;
多源复制;
GIS 相关改进;
原生 JSON 支持;
组复制;
InnoDB Cluster;
增强半同步(AFTER_SYNC);
基于WRITESET的并行复制;
在线开启GTID复制;
在线设置复制过滤规则;
在线修改Buffer pool的大小;
在同一长度编码字节内,修改VARCHAR的大小只需修改表的元数据,无需创建临时表;
可设置NUMA架构的内存分配策略(innodb_numa_interleave);
透明页压缩(Transparent Page Compression);
UNDO表空间的自动回收;
查询优化器的重构和增强;
可查看当前正在执行的SQL的执行计划(EXPLAIN FOR CONNECTION);
引入了查询改写插件(Query Rewrite Plugin),可在服务端对查询进行改写;
EXPLAIN FORMAT=JSON会显示成本信息,这样可直观的比较两种执行计划的优劣;
引入了虚拟列,类似于Oracle中的函数索引;
新实例不再默认创建test数据库及匿名用户;
引入ALTER USER命令,可用来修改用户密码,密码的过期策略,及锁定用户等;
MySQL.user表中存储密码的字段从password修改为authentication_string;
表空间加密;
优化了Performance Schema,其内存使用减少。Performance Schema引入了众多instrumentation。常用的有Memory usage instrumentation,可用来查看MySQL的内存使用情况,Metadata Locking Instrumentation,可用来查看MDL的持有情况,Stage Progress * instrumentation,可用来查看Online DDL的进度;
同一触发事件(INSERT,DELETE,UPDATE),同一触发时间(BEFORE,AFTER),允许创建多个触发器。在此之前,只允许创建一个触发器;
InnoDB原生支持分区表,在此之前,是通过ha_partition接口来实现的;
分区表支持可传输表空间特性;
集成了SYS数据库,简化了MySQL的管理及异常问题的定位;
原生支持JSON类型,并引入了众多JSON函数;
引入了新的逻辑备份工具MySQLpump,支持表级别的多线程备份;
引入了新的客户端工具MySQLsh,其支持三种语言:JavaScript, Python and SQL。两种API:X DevAPI,AdminAPI,其中,前者可将MySQL作为文档型数据库进行操作,后者用于管理InnoDB Cluster;
MySQL_install_db被MySQLd --initialize代替,用来进行实例的初始化;
原生支持systemd;
引入了super_read_only选项;
可设置SELECT操作的超时时长(max_execution_time);
可通过SHUTDOWN命令关闭MySQL实例;
引入了innodb_deadlock_detect选项,在高并发场景下,可使用该选项来关闭死锁检测;
引入了Optimizer Hints,可在语句级别控制优化器的行为,如是否开启ICP,MRR等,在此之前,只有Index Hints;
GIS的增强,包括使用Boost.Geometry替代之前的GIS算法,InnoDB开始支持空间索引。
MySQL 各版本区别说明
MySQL 5.7
2015年发布,MySQL5.7查询性能得以大幅提升,比 MySQL 5.6 提升 1 倍,降低了建立数据库连接的时间。
MySQL 5.6
2013年2月发布,MySQL5.6版本其中InnoDB可以限制大量表打开的时候内存占用过多的问题,InnoDB性能加强。
大内存优化等InnoDB死锁信息可以记录到 error 日志,方便分析InnoDB提供全文索引能力。
MySQL 5.5
2010年12月发布MySQL5.5版本默认存储引擎更改为InnoDB 多个回滚段(Multiple Rollback Segments),之前的innodb版本最大能处理1023个并发处理操作,现在MySQL5.5可以处理高达128K的并发事物 改善事务处理中的元数据锁定。例如,事物中一个语句需要锁一个表,会在事物结束时释放这个表,而不是像以前在语句结束时释放表。 增加了INFORMATION_SCHEMA[ˈski:mə]]表,新的表提供了与InnoDB压缩和事务处理锁定有关的具体信息。
MySQL 5.1
2008年发布的MySQL 5.1 的版本,基本上就是一个增加了崩溃恢复功能的MyISAM,使用表级锁,但可以做到读写不冲突,即在进行任何类型的更新操作的同时都可以进行读操作,但多个写操作不能并发。
MySQL 5.0
2005年的5.0版本又添加了存储过程、服务端游标、触发器、查询优化以及分布式事务功能。
MySQL 5.0版本之前,MyISAM 默认支持的表大小为4G
MySQL-5.0以后,MyISAM 默认支持256T的表单数据。
MyISAM 只缓存索引数据。
MySQL 4.1
2002年发布的4.0 Beta版,至此MySQL终于蜕变成一个成熟的关系型数据库系统。
2002年MySQL4.1版本增加了子查询的支持,字符集增加UTF-8,GROUP BY语句增加了ROLLUP,MySQL.user表采用了更好的加密算法。
支持每个innodb引擎的表单独放到一个表空间里。
innodb通过使用MVCC(多版本并发控制)来获取高并发性,并且实现sql标准的4种隔离级别,同时使用一种被称成next-key locking的策略来避免幻读(phantom)现象。
除此之外,innodb引擎还提供了插入缓存(insert buffer)、二次写(double write)、自适应哈西索引(adaptive hash index)、预读(read ahead)等高性能技术。请参见米扑博客:MySQL 事务隔离级别和实现原理
参考推荐:
MySQL 时间函数加减计算 (推荐)
MySQL 中 distinct 和 group by 性能比较
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2021-03-22 05:04:48
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
转载注明: MySQL 主流版本更新记录 (米扑博客)