1.mysql体系结构

image.png
MySQL 最上层是连接组件。下面服务器是由连接池、管理工具和
服务、SQL 接口、解析器、优化器、缓存、存储引擎、文件系统组成。

连接池:由于每次建立建立需要消耗很多时间,连接池的作用就是将这些连
接缓存下来,下次可以直接用已经建立好的连接,提升服务器性能。
管理工具和服务:系统管理和控制工具,例如备份恢复、Mysql 复制、集群

SQL 接口:接受用户的 SQL 命令,并且返回用户需要查询的结果。比如 select
from 就是调用 SQL Interface
解析器: SQL 命令传递到解析器的时候会被解析器验证和解析。解析器主要
功能:
a . 将 SQL 语句分解成数据结构,并将这个结构传递到后续步骤,以后 SQL
语句的传递和处理就是基于这个结构的
b. 如果在分解构成中遇到错误,那么就说明这个 sql 语句是不合理的
优化器:查询优化器,SQL 语句在查询之前会使用查询优化器对查询进行优
化。
缓存器: 查询缓存,如果查询缓存有命中的查询结果,查询语句就可以直
接去查询缓存中取数据。
这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key 缓存,
权限缓存等

2. 存储引擎

InnoDB 存储引擎
InnoDB 是 MySQL 的默认事务型引擎,也是最重要、使用最广泛的存储引擎。
它被设计用来处理大量的短期(short-lived)事务,短期事务大部分情况是正常提交
的,很少会被回滚。InnoDB 的性能和自动崩溃恢复特性,使得它在非事务型存
储的需求中也很流行
特点
1.分为表结构和数据(数据和索引存在一起,所以占内存)
2.因此数据文件有两个 .frm(表结构) 数据

MylSAM 存储引擎
在 MySQL 5.1 及之前的版本,MyISAM 是默认的存储引擎。MyISAM 提供了
大量的特性,包括全文索引、压缩、空间函数(GIS)等,但 MyISAM 不支持事
务和行级锁,而且有一个毫无疑问的缺陷就是崩溃后无法安全恢复。尽管MyISAM
引擎不支持事务、不支持崩溃后的安全恢复,但它绝不是一无是处的。对于只读
的数据,或者表比较小、可以忍受修复(repair)操作,则依然可以继续使用 MyISAM
(但请不要默认使用 MyISAM,而是应当默认使用 InnoDB)。但是 MyISAM 对整
张表加锁,而不是针对行。读取时会对需要读到的所有表加共享锁,写入时则对
表加排他锁。MyISAM 很容易因为表锁的问题导致典型的的性能问题。

特点
1.分为表结构,数据和索引
2.因此数据文件有三个 .frm(表结构) .MYD(数据) .MYI(索引)

Archive 引擎
Archive 存储引擎只支持 INSERT 和 SELECT 操作,在 MySQL 5.1 之前也不支持
索引。Archive 引擎会缓存所有的写并利用 zlib 对插入的行进行压缩,所以比
MyISAM 表的磁盘 I/O 更少。但是每次 SELECT 查询都需要执行全表扫描。所以
Archive 表适合日志和数据采集类应用,这类应用做数据分析时往往需要全表扫
描。或者在一些需要更快速的 INSERT 操作的场合下也可以使用。Archive 引擎不
是一个事务型的引擎,而是一个针对高速插入和压缩做了优化的简单引擎。

特点 插入快,适合记录日志,比如signit.Log表

Memory 引擎
如果需要快速地访问数据,并且这些数据不会被修改,重启以后丢失也没有
关系,那么使用 Memory 表(以前也叫做 HEAP 表)是非常有用的。Memory 表至
少比 MyISAM 表要快一个数量级,因为每个基于 MEMORY 存储引擎的表实际对
应一个磁盘文件。该文件的文件名与表名相同,类型为 frm 类型。该文件中只存
储表的结构。而其数据文件,都是存储在内存中,这样有利于数据的快速处理,
提高整个表的效率,不需要进行磁盘 I/O。所以 Memory 表的结构在重启以后还
会保留,但数据会丢失。
Memroy 表在很多场景可以发挥好的作用:
用于查找(lookup)或者映射(mapping)表,例如将邮编和州名映射的表。
用于缓存周期性聚合数据(periodically aggregated data)的结果。
用于保存数据分析中产生的中间数据。
Memory 表支持 Hash 索引,因此查找操作非常快。虽然 Memory 表的速度
非常快,但还是无法取代传统的基于磁盘的表。Memroy 表是表级锁,因此并发
写入的性能较低。它不支持 BLOB 或 TEXT 类型的列,并且每行的长度是固定的,
所以即使指定了 VARCHAR 列,实际存储时也会转换成 CHAR,这可能导致部分
内存的浪费

特点写差 读快,适合某些固定的数据.只读的数据, 比如省市的映射关系, Euser和Emem的映射 euser和puser的映射

3.mysql基本配置操作

当 MySQL 实例启动时,数据库会先去读一个配置参数文件,用来寻找数据
库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存
结构有多大等。在默认情况下,MySQL 实例会按照-定的顺序在指定的位置进行
读取,用户只需通过命令 mysql —help|grep my.cnf 来寻找即可。
image.png

当然,也可以在启动MySQL时,指定配置文件

image.png
在类 UNIX 系统中用来启动 MySOL 服务器程序的可执行文件有很多,大多在
MNySQL 安装目录的 bin 目录下。
mysqld
mysqld 这个可执行文件就代表着 MySOL 服务器程序,运行这个可执行文件
就可以直接启动一个服务器进程。但这个命令不常用。
mysqld_safe
mysqld safe 是一个启动脚本,它会间接的调用 mysqld,而且还顺便启动了
另外一个监控进程,这个监控进程在服务器进程挂了的时候,可以帮助重启它。
另外,使用 mysqld_safe 启动服务器程序时,它会将服务器程序的出错信息和其他
诊断信息重定向到某个文件中,产生出错日志,这样可以方便我们找出发生错误
的原因。
mysql.server
mysql.server 也是一个启动脚本,它会间接的调用 mysqld_safe,在调用
mysql.server 时在后边指定 start 参数就可以启动服务器程序了
就像这样:
mysql.server start需要注意的是,这个 mysql.server 文件其实是一个链接文件,它的实际文件
是 support-files/mysql.server,所以如果在 bin 目录找不到,到 support-files 下去
找找,而且如果你愿意的话,自行用 ln 命令在 bin 创建一个链接。
另外,我们还可以使用 mysql.server 命令来关闭正在运行的服务器程序,只
要把 start 参数换成 stop 就好了:
mysql.server stop
mysqld_multi
其实我们一台计算机上也可以运行多个服务器实例,也就是运行多个 NySQL
服务器进程。mysql_multi 可执行文件可以对每一个服务器进程的启动或停止进
行监控。
在我们成功启动 MysTL 服务器程序后,就可以接着启动客户端程序来连接到
这个服务器喽, bin 目录下有许多客户端程序,比方说 mysqladmin、mysqldump、
mysqlcheck 等等。
我们常用的是可执行文件 mysql,通过这个可执行文件可以让我们和服务器
程序进程交互,也就是发送请求,接收服务器的处理结果。
mysqladmin 执行管理操作的工具,检查服务器配置、当前运行状态,创建、
删除数据库、设置新密码。
mysqldump 数据库逻辑备份程序。
mysqlbackup 备份数据表、整个数据库、所有数据库,一般来说 mysqldump
备份、mysql 还原。