一、MySQL体系结构和存储引擎
一、MySQL体系结构和存储引擎
1.1 定义数据库和实例
- 数据库:物理操作系统文件或其他形式文件类型的集合。在MySQL数据库中,数据库文件可以是 frm、MYD、MYI、ibd结尾的文件。
- 实例:MySQL数据库由后台线程以及一个共享内存区组成。共享内存可以被运行得后台线程所共享。需要牢记的是,数据库实例才是真正用于操作数据库文件的。
这两个词有时可以互换使用,不过两者的概念完全不同。在MySQL数据库中,实例与数据库的关系通常是一一对应的,即一个实例对应一个数据库,一个数据库对应一个实例。但是,在集群情况下可能存在一个数据库被多个数据库实例使用的情况。
当启动实例时,MySQL数据库会去读取配置文件,根据配置文件的参数来启动数据库实例。
linux /etc/my.cnf
win .cnf / .ini
配置文件中有一个参数 datadir,该参数指定了数据库所在的路径。linux 默认 datadir 为 /usr/local/mysql/data
1.2 MySQL体系结构
从概念上讲,数据库是文件的集合,是依照某种数据模型组织起来并存放于二级存储器中的数据集合;数据库实例是程序,是位于用户与操作系统之间的一层数据管理软件,用户对数据库数据的任何操作,包括数据库定义、数据查询、数据维护、数据库运行控制等都是在数据库实例下进行的,应用程序只有通过数据库实例才能和数据库打交道。
存储引擎是基于表的,而不是数据库。
1)InnoDB存储引擎
支持事务,行锁,支持外键
通过使用多版本并发控制(MVCC)来获得高并发性,并且实现了SQL标准的4种隔离级别,默认是 repeatable 级别。同时,使用一种被称为 next-key locking
的策略来避免幻读。除此之外,InnoDB存储引擎还提供了插入缓冲(insert buffer)、二次读写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能和高可用的功能。
对于表中数据的存储,InnoDB存储引擎使用了聚集(clustered)的方式,因此每张表的存储都是按主键的顺序进行存放。如果没有显式地在表定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的 ROWID,并以此作为主键。
next-key locking Innodb锁机制:Next-Key Lock 浅谈
插入缓冲(insert buffer) Mysql关键特性-插入缓冲 (Insert Buffer)
二次读写(double write)MySQL InnoDB特性:两次写(Double Write)
自适应哈希索引(adaptive hash index)MySQL 自适应哈希索引
预读(read ahead)MySQL的预读机制
2)MyISAM 存储引擎
不支持事务、表锁、支持全文索引
由 MYD 、MYI组成,MYD 用来存放数据文件,MYI 用来存放索引文件
1.5 连接MySQL
一个连接进程和MySQL数据库实例进行通信。从程序设计的角度来说,本质上是进程通信。如果对进程通信比较了解,可以知道常用的进程通信方式有管道、命名管道、命名字、TCP / IP 套接字、UNIX 域套接字。
在通过 TCP / IP 连接到 MySQL 实例时,MySQL数据库会先检查一张权限视图,用来判断发起请求的客户端IP是否允许连接到 MySQL实例。
原文地址:https://www.cnblogs.com/lhxBlogs/p/17658637.html
- 基础篇章:关于 React Native 之 Slider 组件的讲解
- Java9 中的 9 个新特性
- ELK 集群 + X-Pack + Redis 集群 + Nginx ,实时日志(数据)搜集和分析的监控系统,简单上手使用
- 基础篇章:关于 React Native 之 Modal 组件的讲解
- 搭建高吞吐量 Kafka 分布式发布订阅消息 集群
- 你真的会用Retrofit2吗?Retrofit2完全教程
- 线程管理之获取和设置线程信息
- 线程创建和运行
- CentOs7.3 安装 MySQL 5.7.19 二进制版本
- Retrofit2.0通俗易懂的学习姿势,Retrofit2.0 + OkHttp3 + Gson + RxJava
- 3.Linux用户权限管理之三(文件与权限的设定)
- CentOs7.3 搭建 MySQL 5.7.19 主从复制,以及复制实现细节分析
- 1.Linux操作系统安装的5种方法以及心得
- 我(作为一名开发者)所犯过的错误
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 原创 | 险些翻车,差一点没做出来的基础算法题
- 原创 | 你追我,如果你追到我……那就算你赢了
- 原创 | 详解gitignore的使用方法,让你尽情使用git add .
- 第31天:面试比 KMP 还容易被问到的匹配算法!
- 原创 | 深度学习开篇,来聊聊感知机的原理
- 算法题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
- 使用Java和Python解题:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
- R语言中%||%是什么意思?
- 原创 | 你会用缓存吗?详解LRU缓存淘汰算法
- 用Java实现:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。
- Hacking with iOS: SwiftUI Edition - Hot Prospects项目(一)
- 原创 | 详解command设计模式,解耦操作和回滚
- 第32天:图解大数打印,这道题如此经典!
- Mac终端配置好的环境变量在关闭终端后失效怎么办
- R中的stack和unstack函数