第一章 MYSQL优化(1)——架构介绍

MYSQL优化(1)

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
第一章 MYSQL优化(1)——架构介绍
第二章 MYSQL优化(2)——SQL的优化1
第三章 MYSQL优化(3)——SQL的优化2
第四章 MYSQL优化(4)——锁的机制
第五章 MYSQL优化(5)——主从配置


MYSQL优化——架构介绍

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

一、简介

MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

  1. MySQL 是开源的,目前隶属于 Oracle 旗下产品。
  2. MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库
  3. MySQL 使用标准的 SQL 数据语言形式。
  4. MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
  5. MySQL 对PHP有很好的支持,PHP 是目前最流行的 Web 开发语言。
  6. MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。
  7. MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。

二、安装(docker版)

2.1. 查询MYSQL镜像命令语句:docker search mysql

第一章 MYSQL优化(1)——架构介绍_第1张图片

2.2. 下载MYSQL镜像命令语句:docker search mysql、、

第一章 MYSQL优化(1)——架构介绍_第2张图片

2.3. 查看本地镜像命令语句:docker images

在这里插入图片描述

2.4. 创建MYSQL容器命令语句:docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
说明:
1.-p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
2.MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。**

在这里插入图片描述

2.4. 安装成功命令语句:docker ps

在这里插入图片描述

2.5. 本机登录:用户名:root 密码12345即可

三、MYSQL基础命令

3.1用户相关命令

3.1.1 创建用户命令语句:create user zhang3 identified by ‘123123’;
说明:创建名称为 zhang3 的用户, 密码设为 123123;

3.1.2查看用户权限命令语句:select host, user, password, select_priv, insert_priv,drop_priv from mysql.user;;
在这里插入图片描述
*说明:
1.host :表示连接类型
A.% 表示所有远程通过 TCP 方式的连接
B.IP 地址 如 (192.168.1.2,127.0.0.1) 通过制定 ip 地址进行的 TCP 方式的连接
C.机器名 通过制定 i 网络中的机器名进行的 TCP 方式的连接
D.::1 IPv6 的本地 ip 地址 等同于 IPv4 的 127.0.0.1
E.localhost 本地方式通过命令行方式的连接 , 比如 mysql -u xxx -p 123xxx 方式的连接。
2.user:表示用户名
A.同一用户通过不同方式链接的权限是不一样的。
3.password:密码
A.所有密码串通过 password(明文字符串) 生成的密文字符串。 加密算法为 MYSQLSHA1 , 不可逆 。
B.mysql 5.7 的密码保存到 authentication_string 字段中不再使用 password 字段。
4.select_priv , insert_priv 等
A.为该用户所拥有的权限。

3.1.3. 修改当前用户的密码命令语句:set password =password(‘123456’);

3.1.4 修改其他用户的密码命令语句:update mysql.user set password=password(‘123456’) where user=‘li4’;
说明:修改李四用户的密码;
注意:所有通过 user 表的修改, 必须 用 flush privileges; 命令才能生效

3.1.5 修改用户名命令语句:update mysql.user set user=‘li4’ where user=‘wang5’;
注意:所有通过 user 表的修改, 必须 用 flush privileges; 命令才能生效

3.1.6 删除用户命令语句:drop user li4;
注意:所有通过 user 表的修改, 必须 用 flush privileges; 命令才能生效

3.2权限相关命令

3.2.1 授予权限命令语句:grant 权限 1,权限 2,…权限 n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’
示例一、给 li4 用户用本地命令行方式下, 授予 atguigudb 这个库下的所有 表的插删改查的权限。
语句:grant select,insert,delete,drop on atguigudb.* to li4@localhost ;
示例二、授予通过网络方式登录的的 joe 用户,对所有库所有表的全部权 限, 密码设为 123
语句:grant all privileges on . to joe@’%’ identified by ‘123’;

3.2.2 收回权限命令语句:grant 权限 1,权限 2,…权限 n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’
命令一、查看当前用户权限
语句:show grants;
命令二、收回权限命令
语句:revoke [权限 1,权限 2,…权限 n] on 库名.表名 from 用户名@用户地址;
命令三:收回全库全表的所有权限
语句:REVOKE ALL PRIVILEGES ON mysql.* FROM joe@localhost;
命令四、收回 mysql 库下的所有表的插删改查 权限
语句:REVOKE select,insert,update,delete ON mysql.* FROM joe@localhost;
注:注意:权限收回后, 必须用户重新登录后, 才能生效。

3.2.3查看权限
查看当前用户权限:show grants;
查看所有用户权限:select * from user ;

四、MYSQL配置文件说明

4.1.log-bin:二进制日志文件 log-bin :用于主重复制
4.2.log-error:错误日志,默认是关闭的,记录严重的警告和错误信息,每次启动和关闭的详细信息等
4.3.log:查询日志,默认关闭,记录查询的sql语句,如果开启会减低mysql的整体性能,因为记录日志也是需要消耗系统资源的
4.4./var/lib/mysql 数据库文件、frm文件:存放表结构 、myd文件:存放表数据、 myi文件:存放表索引
4.5.Windows 系统下:my.ini文件;Linux 系统下:etc/my.cnf

五、MySQL 架构介绍

第一章 MYSQL优化(1)——架构介绍_第3张图片
5.1.主要层级说明

层级 用途
连接层 最上层是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
服务层 主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化及部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等。在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定查询表的顺序,是否利用索引等,最后生成相应的执行操作。如果是select语句,服务器还会查询内部的缓存。如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能。
引擎层 存储引擎层,存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过APl与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。后面介绍MyISAM和InnoDB
存储层 数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。

5.2.服务层说明

组件 用途
SQL Interface SQL 接口。 接受用户的 SQL 命令, 并且返回用户需要查询的结果。 比如 select from 就是调用 SQL Interface
Parser 解析器。 SQL 命令传递到解析器的时候会被解析器验证和解析
Optimizer 查询优化器。 SQL 语句在查询之前会使用查询优化器对查询进行优化, 比如有 where 条件时, 优化器来决定先投影还是先过滤。
Cache 和 Buffer 查询缓存。 如果查询缓存有命中的查询结果, 查询语句就可以直接去查询缓存中取 数据。 这个缓存机制是由一系列小缓存组成的。 比如表缓存, 记录缓存, key 缓存, 权限缓存等

5.3其余组件说明

组件 用途
Connectors 指的是不同语言中与SQL的交互Interface
Management Serveices & Utilities 系统管理和控制工具
Connection Pool 连接池:1.管理缓冲用户连接,线程处理等需要缓存的需求。负责监听对 MySQL Server 的各种请求,接收连接请求,转发所有连接请求到线程管理模块。2.每一个连接上 MySQL Server 的客户端请求都会被分配(或创建)一个连接线程为其单独服务。而连接线程的主要工作就是负责 MySQL Server 与客户端的通信。接受客户端的命令请求,传递 Server 端的结果信息等。线程管理模块则负责管理维护这些连接线程。包括线程的创建,线程的 cache 等。
SQL Interface SQL接口。接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface
Parser/解析器 1、SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。2、在 MySQL中我们习惯将所有 Client 端发送给 Server 端的命令都称为 Query,在 MySQL Server 里面,连接线程接收到客户端的一个 Query 后,会直接将该 Query 传递给专门负责将各种 Query 进行分类然后转发给各个对应的处理模块。3、解析器的主要功能:3.1将SQL语句进行语义和语法的分析,分解成数据结构,然后按照不同的操作类型进行分类,然后做出针对性的转发到后续步骤,以后SQL语句的传递和处理就是基于这个结构的。3.2如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的
Optimizer/查询优化器 1\SQL语句在查询之前会使用查询优化器对查询进行优化。就是优化客户端发送过来的 sql 语句 ,根据客户端请求的 query 语句,和数据库中的一些统计信息,在一系列算法的基础上进行分析,得出一个最优的策略,告诉后面的程序如何取得这个 query 语句的结果;2、他使用的是“选取-投影-联接”策略进行查询。举例说明:2.1用一个例子就可以理解: select uid,name from user where gender = 1;2.2这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行gender过滤;2.3这个select查询先根据uid和name进行属性投影,而不是将属性全部取出以后再进行过滤;2.4将这两个查询条件联接起来生成最终查询结果;
Cache和Buffer/查询缓存 1、他的主要功能是将客户端提交 给MySQL 的 Select 类 query 请求的返回结果集 cache 到内存中,与该 query 的一个 hash 值 做一个对应。该 Query 所取数据的基表发生任何数据的变化之后, MySQL 会自动使该 query 的Cache 失效。在读写比例非常高的应用系统中, Query Cache 对性能的提高是非常显著的。当然它对内存的消耗也是非常大的。2、如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等
存储引擎接口 1、存储引擎接口模块可以说是 MySQL 数据库中最有特色的一点了。目前各种数据库产品中,基本上只有 MySQL 可以实现其底层数据存储引擎的插件式管理。这个模块实际上只是 一个抽象类,但正是因为它成功地将各种数据处理高度抽象化,才成就了今天 MySQL 可插拔存储引擎的特色。2、从上图还可以看出,MySQL区别于其他数据库的最重要的特点就是其插件式的表存储引擎。MySQL插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,可能是每个数据库系统本身都必需的,如SQL分析器和优化器等,而存储引擎是底层物理结构的实现,每个存储引擎开发者都可以按照自己的意愿来进行开发。3、存储引擎是基于表的,而不是数据库

5.3.SQL执行步骤第一章 MYSQL优化(1)——架构介绍_第4张图片
说明:
1.发送SQL语句。
2.查询缓存,如果命中缓存直接返回结果。
3.SQL解析,预处理,再由优化器生成对应的查询执行计划。
4.执行查询,调用存储引擎API获取数据。
5.返回结果。

六、MySQL 存储引擎

6.1. 查看 mysql 支持的存储引擎命令语句:show engines;
/
第一章 MYSQL优化(1)——架构介绍_第5张图片
6.2.查看 mysql 默认的存储引擎:show variables like ‘%storage_engine%’;
/在这里插入图片描述

你可能感兴趣的:(mysql,mysql)