做技术,经常说要跟踪最新的技术前沿知识,不断学习,掌握新技术。

那么,如何高效、快速的跟踪最新技术潮流呢?

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 事务隔离级别和实现原理

 

 

参考推荐:

Java JDK升级各个版本的新特性

MySQL 主流版本更新记录

MySQL 事务隔离级别和实现原理

数据库分库分表的解决方案比较

分布式系统事务一致性解决方案

MySQL 数据库主从心得整理

MySQL命令操作(Linux平台)

MySQL 删除数据后物理空间未释放

MySQL 查看数据库大小、表大小和最后修改时间  (推荐

PHP MySQL中 uft-8中文编码乱码的解决办法

MySQL 常用语法总结

MySQL 时间函数加减计算  (推荐

MySQL 创建索引、修改索引、删除索引的命令

MySQL 存储引擎InnoDB和MyISAM区别

MySQL 执行sql及慢查询监控

MySQL 中case when语句用法

MySQL 函数 group_concat

MySQL 中 distinct 和 group by 性能比较

MySQL 查询语句取整数或小数

统计Redis中各种数据的大小

主键与唯一索引的区别

Java 程序员必读的经典书籍

网站更新日志的几种样式与实现