大家好今天又与大家见面了。IT技术无领域、国界之分,不断学习最新技术走在IT技术前沿一直是我们的目标网站模板下载争取把自己所学的知识,所经历的经验,拿出来与大家分享,共同成长与进步。在当前这个群雄并起的大环境下,与其分开时各自牛逼,不如在一起时天下无敌!
在这个开源数据库纷纷而起的时代,我们一定要找准自己学习的一个方向,不要盲目地去做一些无用功,而浪费自己的时间。在这些众多开源数据库当中,龙头大哥毫无疑问就是MySQL。听过老张课的人,都知道我经常把MySQL比喻成数据库界的一条巨龙。想要学好用好MySQL数据库,就需要屡清这条“巨龙”的所有脉络特点。下面老张把学习MySQL数据库的所有知识点用线路串联起来。让大家知道我们必须掌握的知识要点。如下图
是不是看完之后,感觉要学习的内容有很多。各位兄弟们千万不要着急,老张我精修了一套学好MySQL数据库的秘籍,给这套秘籍起了一个名字,就是丐帮神技"降龙十八掌"。MySQL属于那种特别接地气儿的数据库,它并没有像是Oracle那种高消费产品,既可以覆盖众多互联网公司,又可以在性能上发挥出巨大威力。所以我觉得丐帮的武功最适合形容MySQL了。此掌共分为5大部分、18招式:依次为MySQL体系结构篇,MySQL实战篇 ,特性与优化篇,监控与升级 ,就业面试宝典篇。
前期的基础理论比较多,大家不要产生学习的厌烦心理。最为核心的原理我们如果能够掌握,那么后期才能把MySQL用得游刃有余。那我们还在等待什么呢,赶紧开启这套MySQL"武功秘籍"的学习吧。
我们先进入第一部分的学习
体系结构篇中的第一掌:亢龙有悔。
本掌主要对MySQL有个整体介绍。包含介绍最新版本8.0的新特性。目的就是为了让大家对MySQL有更深的认识。
初识MySQL
1999年至2000年,Monty成立了MySQL AB这家公司。2000 年,MySQL公布了自己的源代码,并采用GPL(GNU General Public License)许可协议,正式进入开源的世界。 2001年至2007年是MySQL开源飞速发展的7年,尤其是在2005年10月发布了一个里程碑式的版本MySQL5.0。
5.0版本中加入了存储过程、服务器端游标、触发器、视图、分布式事务(Xa transactions)、查询优化器的显著改进以及其他的一些特性。这也为MySQL5.0之后的版本奠定了迈向高性能数据库的发展基础。2008年1月16号Sun收购了MySQL,花了10亿美元。之后不久,2009年4月20日Oracle收购了Sun公司。随之MySQL就变成了Oracle旗下的一个产品,之后就是我们所熟悉的MySQL5.5、5.6、5.7这些版本了。
确切一点说,MySQL5.5应该是Sun和Oracle之间的一个过渡版本,实际上MySQL5.6才是Oracle开发的第一个版本,在MySQL5.6的基础上,Oracle对MySQL进行了一次强悍的加工,才有了 MySQL5.7的问世。
MySQL分支版本介绍
目前MySQL主流的分支版本有Oracle官方版本的MySQL、Percona Server、MariaDB。接下来看一下各个分支的特点。
目前MySQL官网最新的GA版就是MySQL8.0.11,虽然MySQL8.0在新特性上没有新元素的加入,但是它对MySQL的源代码进行了重构,最突出的一点就是对MySQL Optimizer优化器的改进,支持隐藏索引等功能。这个版本将使MySQL数据库又进入一个新的开拓时代。
下面就顺势总结一下MySQL8.0版本的新特性
1. 新增了事务类型的数据字典,所有的元数据信息,都用InnoDB存储引擎进行存储。8.0之前的版本中,我们知道Server层和InnoDB引擎层有两套数据字典表。其中Server层部分的数据字典,存储在.frm文件里面。而InnoDB存储引擎层也有自己的数据字典表,在information_schema库下面的 tables表中进行存储。
这种方式的最大问题就是:数据字典信息改动很难同步,而且两个字典信息库很难保证一致性,根结就在于DDL操作不是原子性的,对数据字典的更新不是事务性的。
老数据字典结构图:
看图说话:文件层面存储在文件系统上,系统表层面 用MyISAM存储引擎存储,而InnoDB存储引擎的数据字典(存储在information_schema库的tables表中)。这样看起来层面太多,存储结构很乱。
新数据字典结构如下图:
看图说话:新的数据字典,不仅简化了层面结构,而且Server层面和InnoDB层面的数据字典进行了合并。数据字典信息全都存储在InnoDB存储引擎里面,实现了原子性的DDL。InnoDB也可以保证对于数据字典表的更新是事务性的。并可以通过视图(views)的方式来查看数据字典,查询性能提升近百倍。
其次目前只有唯一一个数据字典源,所以我们对它的访问可以通过唯一 一套加锁机制来实现。主要是通过server层面的元数据锁,简称MDL.通过这个来实现对数据字典表的并发访问。好处就在于InnoDB内部数据字典相关的锁就会被优化掉,并发性能得到提升。最后一点就是Server层面比起之前版本,会接受更多的任务,InnoDB存储引擎逐渐减少了工作量。让InnoDB可以挥发其最大作用。MySQL8.0版本,所有数据字典信息和系统表都存储在mysql.ibd(不允许用户自己创建)
注:临时表的信息不会记录到数据字典里面,仅仅保留在内存部分,这样维护效率比较高。
2. 角色管理。
创建角色命令:CREATE ROLE 'zs_read', 'zs_write';
角色授权:
命令如下:GRANT SELECT ON test.* TO 'zs_read'; GRANT INSERT, UPDATE, DELETE ON test.* TO 'zs_write';
给用户赋予角色:
命令如下:GRANT 'zs_read' TO 'zs_ro'@'localhost';
GRANT 'zs_read','zs_write' TO 'zs_rw'@'localhost';
使用角色可以方便地对用户权限进行管理。
3.配置持久化
MySQL 的设置可以在运行时通过 SET GLOBAL 命令来更改,但是这种更改只会临时生效,到下次启动时数据库又会从配置文件中读取。
MySQL 8.0新增了SET PERSIST 命令。命令如下:
set persist sync_binlog=1;
MySQL 会将该命令的配置保存到数据目录下的 mysqld-auto.cnf 文件中,下次启动时会读取该文件,用其中的配置来覆盖缺省的配置文件。
4.字符集
从 MySQL8.0 开始,数据库的缺省编码将改为 utf8mb4,这个编码包含了所有 emoji 字符。
5.隐藏索引
开始支持invisible index,在优化SQL的过程中可以设置索引为不可见,MySQL优化器便不会利用不可见索引。我们可以通过隐藏该索引,来观察对数据库性能的影响,好的话就留下,不好就删除。
用法:
alter table t alter index column_idx invisible;
6.支持DDL 原子操作
InnoDB表的DDL支持事务完整性,要么成功要么回滚,将DDL操作回滚日志写入到data dictionary 数据字典表 mysql.innodb_ddl_log 中用于回滚操作。
7.直方图的引入
MySQL 8.0 版本开始支持期待已久直方图。优化器会利用存储在I_S的column_statistics的数据,判断字段的值的分布,得到更准确的执行计划。
用法:
ANALYZE TABLE table_name [UPDATE HISTOGRAM|DROP HISTOGRAM]
8.支持会话级别SET_VAR 动态调整部分参数,有利于提升语句性能
用法:
select /*+ SET_VAR(sort_buffer_size = 16M) */ name from people order y name;
insert /*+ SET_VAR(foreign_key_checks=OFF) */ into t2 values(2);
以上就是MySQL8.0主要的新特性。
下面总结一下MYSQL8的概要:Percona Server是MySQL重要的分支之一,它基于InnoDB存储引擎的基础上,提升了性能和易管理性,最后形成了增强版的XtraDB引擎,可以用来更好地发挥服务器硬件上的性能。所以Percona Server也可以称为增强的MySQL与开源的插件(plugin)的结合。由于官方版本的MySQL在一些特性的使用上有一定的局限性,需要收费。所以Percona Server就有了一定的市场占有比例,也比较受大家的欢迎。像一些常用的工具包xtrabackup、percona-toolkit等,在生产环境中是DBA的必备武器。还有像XtraDB-Cluster这种支持多点写入的强同步高可用集群架构,真正实现实时同步的过程,解决了MySQL主从复制之间经常出现并让人头疼的延迟问题。而且Percona还收购了TokuDB公司,TokuDB存储引擎非常优秀,淘宝网、阿里云上大量在使用这款存储引擎。它支持数据压缩,支持hot scheme modification,它的高扩展性和查询插入性能之快都是我们喜欢它的地方。
Mariadb是由MySQL创始人Monty创建的,是一款高度兼容的MySQL产品,主要由开源社区维护,采用GPL授权许可。Oracle把MySQL收购之后,为避免MySQL在开源粒度上的下降,MariaDB由此而生。它不仅仅是MySQL的一个替代品,还创新与提高了MySQL原有的技术。既包含了Percona的XtraDB存储引擎,还包含TokuDB存储引擎、Spider水平分片存储引擎等多种存储引擎,并且还有一些复制功能上的新特性,像基于表的并行复制、Multi-source Replication多源复制、Galera Cluster集群。
标识标牌识标牌网站就是用的是MYSQL8!