第一章 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

在这里插入图片描述

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

在这里插入图片描述

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 架构介绍

在这里插入图片描述
5.1.主要层级说明

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

5.2.服务层说明

组件用途
SQL InterfaceSQL 接口。 接受用户的 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 InterfaceSQL接口。接受用户的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执行步骤在这里插入图片描述
说明:
1.发送SQL语句。
2.查询缓存,如果命中缓存直接返回结果。
3.SQL解析,预处理,再由优化器生成对应的查询执行计划。
4.执行查询,调用存储引擎API获取数据。
5.返回结果。

六、MySQL 存储引擎

6.1. 查看 mysql 支持的存储引擎命令语句:show engines;
/
在这里插入图片描述
6.2.查看 mysql 默认的存储引擎:show variables like ‘%storage_engine%’;
/在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值