新特性

对于使用者而言,新特性应该是关注的第一焦点。下面会针对版本列出一些个人认为有特点的新特性。

5.5

InnoDB 作为默认存储引擎

InnoDB 因为支持事务、行级别锁而广为人知,并广泛应用。但是在之前的版本中,InnoDB并不是默认的存储引擎。在5.5中,InnoDB成为了默认的存储引擎。

半同步复制

半同步复制(Semisynchronous Replication)在MySQL 5.5中被支持(以插件形式实现)。

默认的MySQL通过异步模式进行复制,主库写入binlog之后,从库不一定能够被读取并处理,因为写入成功只是说明在主库上成功。主从不同步带来的问题相当之多,提升了开发难度。

而半同步复制则是主库需要有至少一个半同步从库,当一次写入操作进行之后,至少在主库和至少一个半同步从库上都完成了写入之后,用户才会收到已成功的信息。

半同步复制在这一程度上提高了数据的安全性。

5.6

MySQL 5.6 的主要变化在性能优化方面。有一些小的新特性也值得关注。

表中可以设置多个Timestamp属性

MySQL 5.5 中,如果设定多个Timestamp的属性为 ON UPDATE CURRENT_TIMESTAMP 时,这样的操作是不能完成的,这样的需求,通常要在业务代码中完成。

而到了 MySQL 5.6 中,这样的操作可以直接通过设定字段的属性即可完成。

InnoDB 支持全文索引

全文索引 MyISAM 存储引擎之前相对于InnoDB的一个“优势”特性,在MySQL 5.6中不复存在。

针对字符串型的字段(CHARVARCHAR或者TEXT),可以选择在创建表时增加这个类型的索引。也可以后续添加。

InnoDB的全文索引也使用的是倒排索引的设计,分词完成的词汇将会存储在独立的索引表之中。当包含全文索引的字段插入之后,会进行分词,同时先将分词结果进入内存缓存,之后再刷入索引表中,避免一次写入带来的大量附加的小规模的更改操作。

多线程复制

在MySQL 5.6中,会针对每一个数据库开启一个独立的复制线程,如果数据库压力平均的话,对于主从同步延迟会有一定的改善。但是如果数据操作都在一个数据库上,就不会有太多显著的效果了。

加入全局事务ID(GTID)

在MySQL 5.6前,如果从库宕机,重启之后需要进行同步,需要知道binlog文件名已经位置。

在MySQL 5.6中,加入了GTID(global transaction identifier)。GTID由source_id和transaction_id构成,source_id标识主库,transaction_id标识在数据库上进行的事务,格式即GTID = source_id:transaction_id

在加入GTID之后,重启从库之后,不需要重新进行位置的指向,只需要连接到主库即可,剩下的步骤将会是自动的。

5.7

InnoDB

InnoDB地位进一步增强,这一次系统表已然变成了基于InnoDB存储引擎的表。并且也不能禁用InnoDB存储引擎了。

增强的多线程复制

在5.6中添加的多线程复制的增强版,针对每个数据库可以增加线程数进行同步,对5.7.9版本,在实际使用中,在机械盘的服务器上,原有业务高峰时主从同步延迟在10-30分钟左右,使用5.7.9之后基本实现了数据上的同步。

多源复制

即将多个主库的数据归并到一个从库的实例上。

之前的MySQL,每个从库都只能拥有一个主库,如今MySQL提供了官方的解决方案,用于将多个主库的数据同步到一个从库之上。

多源复制有一个关键概念,即频道(channel)。频道指代一个主从库之间用于同步binlog的连接,通过新增的FOR CHANNEL子句,指定一个非空的频道名称,按照先前版本的连接主库的方法,即可实现多源复制功能。

需要注意的是,当多个主库均写入同一张表时,是要自行处理主键冲突。

JSON数据类型操作

PostgreSQL 9.3开始,PostgreSQL中JSON成为了内置的数据类型。

作为被广泛使用的数据组织格式,之前版本的只能讲JSON格式数据按照字符串形式进行存储。

到了5.7之后,JSON支持也被加入。

JSON中的字符串在MySQL中会被转化成utf8mb4的字符集,给携带诸如emoji字符的数据的存储带来了方便。

对于JSON数据的结构特性,MySQL中对JSON的查询需要借助path expression以及JSON_EXTRACT方法进行查询。path expression的简要要点如下:

  • $符号开头
  • .符号紧接着的是对象中的key
  • [n]中表示的是数组中的第n个元素,n>=0
  • .[*]表示一个key下的所有对象
  • [*]表示一个key下所有的数组
  • exp_a**exp_b则表示path中带有exp_aexp_b的值
  • key如果包含特殊字符,需要通过双引号包裹起来

更多操作参见手册。

innodb_buffer_pool_size参数动态修改

在之前的版本中,innodb_buffer_pool_size调整之后,需要重启数据库实例,这个对于线上业务几乎是不可接受的。硬件性能强悍的服务器,调整这一参数之后,MySQL的表现会有较为客观的提升。

到了MySQL 5.7,这一参数终于可以在线调整了。

初始化工具

在之前的版本中,初始化系统表一般都会使用mysql_install_db脚本,到MySQL 5.7之后建议使用mysqld --initialize完成实例初始化。

在通过mysqld --initialize进行初始化时,需要加上--initial-insecure才能实现空密码登录,否则会将初始化的默认密码写入到错误文件中。

初始化完成之后,还需要使用MySQL 5.7版本的客户端登录,并且修改默认密码。

8.0

作为版本号突飞猛进的一个版本,在MySQL 8.0中新增了如下的特性:

用户角色

8.0中将会增强账号管理的功能,提供角色这一概念,即能组合权限,批量授权给某一用户。

增强的InnoDB

  • 自增id会写入到redo log中,这一改动使得数据库重启之后的自增值能恢复到重启前的状态
  • 增加了死锁检测开关innodb_deadlock_detect,可以在高并发系统中动态调整这一特性,提升性能

增强的JSON操作

  • 增加了->>操作符,使用这一操作符等同于对JSON_EXTRACT的结果进行JSON_UNQUOTE操作,简化了SQL语句
  • 增加了按JSON数据组织返回数据操作的两个方法:JSON_ARRAYAGGJSON_OBJECTAGGJSON_ARRAYAGG将某列的值按照一个JSON数据返回,而JSON_OBJECTAGG将列A作为键,列B作为值,返回一个JSON对象格式的数据

msql 5.5 5.6 5.7 8.0 区别相关推荐

  1. ubuntu apt安装lamp

    如何安装 apache2 + php5 + mysql? 我们用简单高效的apt 1. 安装运行环境 sudo apt-get install apache2 sudo apt-get install ...

  2. mysql高级技术之mycat读写分离技术实践

    1,课程回顾 2,本章重点 mysql 主从原理,好处mycat 概念,读写分离好处,读写分离的实现 3,具体内容 3.1 mysql 主从 3.1.1 linux下mysql安装 以mysql5.6 ...

  3. TDSQL“相似查询工具MSQL+”入选VLDB论文

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云数据库 TencentDB发表于云+社区专栏 作者介绍:王晓宇,腾讯数据库TDSQL团队成员,目前参与TDSQL数据库内核研发工 ...

  4. M-SQL:超强的多任务表示学习方法

    摘要:本篇文章将硬核讲解M-SQL:一种将自然语言转换为SQL语句的多任务表示学习方法的相关论文. 本文分享自华为云社区<[云驻共创]M-SQL,一种超强的多任务表示学习方法,你值得拥有> ...

  5. 通过透明网关访问MSQL

    ORACLE从8i起开始提供Transparent Gateway实现异构数据库之间的互访.在ORACLE 8i和ORACLE 9i中Transparent Gateway可以从oracle serv ...

  6. TDSQL“相似查询工具MSQL+”入选VLDB论文 1

    腾讯与高校合作的论文入选数据库顶会 腾讯TDSQL团队携手中国人民大学信息学院.武汉大学计算机学院合作的DEMO论文"MSQL+: a Plugin Toolkit for Similari ...

  7. 基于PHP+MSQL的在线邮箱管理系统的设计与实现【开题报告、源码】

    本科毕业论文(设计)开题报告 学 院 指导老师 职 称 专业班级 学生姓名 学 号 题 目 基于PHP+MSQL的在线邮箱管理系统的设计与实现 系统视频见:[PHP邮件管理系统] bilibili视频 ...

  8. msql详细安装教程(内含5.7版本安装包)

    1.如果你有安装包,直接进行数据库的安装. 如果你没有安装包,又不想去官网下载,5.7版本的安装包链接如下. mysql安装包: 链接:https://pan.baidu.com/s/1q0mvgLm ...

  9. 免费数据库(SQLite、Berkeley DB、PostgreSQL、MySQL、Firebird、mSQL、MSDE、DB2 Express-C、Oracle XE)...

    SQLite数据库是中小站点CMS的最佳选择 SQLite 是一个类似Access的轻量级数据库系统,但是更小.更快.容量更大,并发更高.为什么说 SQLite 最适合做 CMS (内容管理系统)呢? ...

最新文章

  1. ICPC / CCPC / Codeforces / AtCoder 单词本
  2. nodejs学习资料
  3. virtio-blk简介
  4. FishC01 讲:我和 Python 第一次亲密接触
  5. javaScript 验证码代码
  6. 第十五届北京师范大学程序设计竞赛决赛(网络同步赛) B lca水 D 思维,找规律...
  7. python中不同类型的数据不能相互运算_Python第三课——数据类型与运算(2)
  8. 洛谷 P2257 YY的GCD
  9. python 分词 词性_分词及词性标注
  10. luffcc项目-04-登录防水墙认证(滑动图片验证码)、在登录认证中接入防水墙、前端获取显示并校验验证码
  11. python shp文件_对python 读取线的shp文件实例详解
  12. MES系统的应用(中)
  13. 2023最新广西大学计算机电子信息考研复试之计算机网络和软件工程 828数据结构与程序设计上岸冲刺复试宝典(复试版/复试资料)
  14. 金融银行软件测试超大型攻略,最受欢迎的金融银行大揭 秘附面试题
  15. 澳大利亚3-1逆转日本 狂斩日本,大家来支持一下,打倒日本,爽爽爽爽爽爽爽爽爽爽爽爽爽爽爽爽爽爽爽爽爽爽
  16. Time Has Never Been Better for a Gay NFL Player to Come Out
  17. C语言常见的错误及解决办法,避坑笔记
  18. 面试加试c语言_经典面试题目C语言
  19. 2019快手校招面试题循环小数
  20. 教你如何轻松搞定云上打印管理

热门文章

  1. selenium:expected [object undefined] undefined to be a string
  2. vue项目中实现语音队列的依次播放
  3. 用心,会议才能开出花儿
  4. android 下拉菜单,Android仿微信实现下拉列表
  5. android app trifit_Android人脸识别app——基于Face++,MVP+Retofit+RxJava+Dagger高度解耦
  6. 第十三届蓝桥杯C++B组国赛E题——出差 (AC)
  7. 大文件上传最全方案:秒传、断点续传、分片上传
  8. 免费申请SSL证书(https认证)教程
  9. 群晖 nas 使用Git Server 和 Gitee 仓库共享
  10. 计算机专业频率多少合适,一般电脑cpu主频多少