【MySQL 高级】架构介绍
MySQL高级 架构介绍
MySQL 简介
MySQL 安装
MySQL 配置文件
- log-bin:二进制日志文件。用于主从复制。它记录了用户对数据库操作的 SQL 语句(除了数据查询语句)信息。可以使用
mysqlbinlog
命令查看二进制日志的内容。 - log-error:错误日志。默认是关闭的,记录严重的警告和错误信息、每次启动和关闭的详细信息等
- log:查询日志。默认是关闭的,记录查询的 sql 语句,如果开启会降低 mysql 的整体性能,因为记录日志也是需要消耗系统资源的
- 数据文件:
- 数据库文件:默认路径为 /var/lib/mysql,所以才有
/docker/mysql5.7.32/data:/var/lib/mysql
目录挂载 - frm 文件:存放表结构
- myd 文件:存放表数据
- myi 文件:存放表索引
- 数据库文件:默认路径为 /var/lib/mysql,所以才有
MySQL 逻辑架构
MySQL 采用一种分层的思想。
和其他数据库相比,MySQL 有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上。
插件式的存储引擎架构将查询处理和其他的系统任务以及数据的存储提取相分离,这种架构额可以根据业务的需求和实际需要选择合适的存储引擎。
- 连接层:这一层主要是完成连接处理、授权认证、及相关的安全方案。在该层上引入线程池的概念,为通过认证安全接入的客户端提供线程。
- 服务层:这一层主要完成大部分的核心服务功能,包括 SQL 接口、SQL 解析、SQL 优化、缓存查询以及内置函数。所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
- SQL Interface:SQL 接口。接受用户的 SQL 命令,并且返回用户需要查询的结果。
- Parser:SQL 解析器。SQL 命令传递到解析器的时候会被解析器验证和解析。
- Optimizer:SQL 查询优化器。SQL 语句在查询之前会使用查询优化器对查询进行优化,比如有 where 条件时,它会决定先投影还是先过滤。
- Caches&Buffers:查询缓存。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取得数据。这个缓存机制是由表缓存、记录缓存、键缓存、权限缓存等组成。
- 引擎层:这一层主要完成数据的存储和提取,服务层通过 API 和存储引擎进行通信,不同的存储引擎适用于不用场合。值得注意的是,存储引擎是基于表的,而不是数据库。
- 存储层:这一层主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。
以一个查询为例,大致流程为:
- MySQL 客户端通过协议与 MySQL 服务器建立链接,发送查询语句。先检查查询缓存,如果没命中,则进行语句解析等操作;如果命中,则直接返回结果,即不会再对查询进行解析、优化、以及执行等操作。
- 然后 MySQL 通过关键字将 SQL 语句进行解析,并生成一颗对应的解析树。语法解析器会使用 MySQL 语法规则验证和解析查询。预处理器则根据一些 MySQL 规则进一步检查解析数据是否合法。
- 然后由语法解析器将解析树转化为执行计划,一条查询语句可以有很多种执行方式,但是最后都会返回相同的结果。优化器会选择其中最好的执行计划。
- 最后,MySQL 默认使用 B 树索引,而且至多使用到表中的一个索引。
MySQL 存储引擎
查看 MySQL 支持的存储引擎:
show engines;
查询结果为:
Engine Support Comment Transactions XA Savepoints InnoDB DEFAULT Supports transactions, row-level locking, and foreign keys YES YES YES MRG_MYISAM YES Collection of identical MyISAM tables NO NO NO MEMORY YES Hash based, stored in memory, useful for temporary tables NO NO NO BLACKHOLE YES /dev/null storage engine (anything you write to it disappears) NO NO NO MyISAM YES MyISAM storage engine NO NO NO CSV YES CSV storage engine NO NO NO ARCHIVE YES Archive storage engine NO NO NO PERFORMANCE_SCHEMA YES Performance Schema NO NO NO FEDERATED NO Federated MySQL storage engine NULL NULL NULL 查询 MySQL 默认使用的存储引擎:
show variables like '%storage_engine%';
查询结果为:
Variable_name Value default_storage_engine InnoDB default_tmp_storage_engine InnoDB disabled_storage_engines internal_tmp_disk_storage_engine InnoDB MyISAM 和 InnoDB 对比:
MyISAM InnoDB 主外键 不支持 支持 事务 不支持 支持 行表锁 支持表锁,不适用高并发场景。 支持行锁,并且采用 MVCC(多版本并发控制) 来支持高并发 缓存 只缓存索引 除了缓存索引还缓存真实数据 表空间 小,以紧密格式存储 大,以数据格式存储 索引 非聚簇索引。它的叶子节点存储的是行数据地址,需要再寻址一次才能得到数据。 聚簇索引。它的主键索引的叶子节点存储的是行数据,因此主键索引非常高效。它的非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引非常高效。 应用场景 非事务表,大量的 select 操作 事务表,大量 insert 和 update 操作 关键特性 地理空间搜索 插入缓冲:对写索引做了优化,但是索引具体起作用是在读数据的时候。 二次写:保证数据页的可靠性。 自适应哈希索引:会监控对表上各索引页的查询,可以提升速度。 异步IO:提高磁盘操作性能。 刷新邻接页:当刷新一个脏页时, InnoDB 会检测该页所在的区, 并将该区下所有的脏页一起刷新。 存储引擎的选择:
- 需要事务支持,推荐 InnoDB
- 需要在线热备份,推荐 InnoDB
- 需要容灾备份,推荐 InnoDB
- 需要地理空间搜索,推荐 MyISAM
存储引擎的转换:
alter table mytable engine = InnoDB;
这种方法适用与任何存储引擎,但是需要执行很长时间。因为MySQL会执行将数据从原表复制到一张新的表中,在复制期间可能会消耗系统所有的I/O能力,同时原表会加上读锁。- 导出和导入。使用 mysqldump 工具将数据导出到文件。
- 创建和查询。先创建一个新的存储引擎的表,然后利用insert... select`语法来导数据。如果数据量太大,可以考虑分批处理,针对每一段数据执行事务提交操作。
总结和练习
【MySQL 高级】架构介绍的更多相关文章
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- MySQL高级学习笔记(三):Mysql逻辑架构介绍、mysql存储引擎
文章目录 Mysql逻辑架构介绍 总体概览 总体概览 mysql存储引擎 查看命令 看你的 mysql 现在已提供什么存储引擎 : 看你的 mysql 当前默认的存储引擎 : 各个引擎简介 MyISA ...
- Mysql逻辑架构介绍
总体概览: 和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用.主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离 ...
- 3.MySQL的架构介绍
MySQL简介: 高级MySQL:mysql 内核 sql优化工程师 mysql服务器的优化 各种参数常量设定 查询语句优化 主从复制 软硬件升级 容灾备份 sql编程 完整的mysql优化需要很深的 ...
- 尚硅谷MySQL高级学习笔记
目录 数据库MySQL学习笔记高级篇 写在前面 1. mysql的架构介绍 mysql简介 mysqlLinux版的安装 mysql配置文件 mysql逻辑架构介绍 mysql存储引擎 2. 索引优化 ...
- MySQL高级01
MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB. 官网下载地址:http://dev.mysql.com/downloa ...
- mysql 高级和 索引优化,目的:查的好,查的快,性能好
1-事物隔离级别: 更新丢失, 并发情况下,对同一字段进行更新,就会出现更新丢失,采用乐观锁,比较版本号或时间戳可解决 读未提交 解决了更新丢失但是会引起脏读, 二个session.sessionA中 ...
- MySQL高级第一章——架构介绍
一.简介 是一个经典的RDBMS,目前归属于Oracle 高级MySQL包含的内容: MySQL内核 SQL优化工程师 MySQL服务器的优化 各种参数常量设定 查询语句优化 主从复制 软硬件升级 容 ...
- mysql高级教程(一)-----逻辑架构、查询流程、索引
mysql逻辑架构 和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用.主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提 ...
随机推荐
- Symbol类型是不可枚举的
const info = { [Symbol('a')]: 'b' } console.log(info)//{Symbol('a'): 'b'} console.log(Object.keys(in ...
- 深入理解Java虚拟机(五)——JDK故障处理工具
进程状况工具:jps jps(JVM Process Status Tool) 作用 用于虚拟机中正在运行的所有进程. 显示虚拟机执行的主类名称以及这些进程的本地虚拟机唯一ID. 可以通过RMI协议查 ...
- jfinal 导出excle
Controller Map<String,List<PoiUtilHeader>> result = new HashMap<String, List<PoiUt ...
- activiti环境安装
使用Eclipse安装activiti插件的时候,没有安装成功,参考这边文章才成功,链接:https://jingyan.baidu.com/article/4dc408480d4201c8d846f ...
- python命名切片
命名切片 c = slice(2, 5) a = [1, 2, 3, 4, 5, 6, 7] print(a[c])
- vue2实现路由懒加载
一.什么是懒加载 顾名思义,懒加载就是随用随加载,什么时候需要就什么时候加载. 二.为什么需要懒加载 在单页应用中,如果没有使用懒加载,webpack打包后的文件会很大,这时进入首页时的加载时间会很长 ...
- 使用tkinter打造一个小说下载器,想看什么小说,就下什么
前言 今天教大家用户Python GUI编程--tkinter 打造一个小说下载器,想看什么小说,就下载什么小说 先看下效果图 Tkinter 是使用 python 进行窗口视窗设计的模块.Tkint ...
- Sublime2-3 Package Control安装
从菜单 View - Show Console 或者 ctrl + ~ 快捷键,调出 console.将以下 Python 代码粘贴进去并 enter 执行,不出意外即完成安装.以下提供 ST3 和 ...
- proxySQL with MGR
环境信息 hostname IP port role comm ms81 192.168.188.81 3399 master ms82 192.168.188.82 3399 slave ms83 ...
- iOS10 App适配权限 Push Notifications 字体Frame 遇到的坑!!!!
添加配置权限 <!-- 相册 --> <key>NSPhotoLibraryUsageDescription</key> <string>"x ...