mysql删库跑路必会姿势(基础篇:MySql架构与存储引擎)

 

基础篇:MySql架构与存储引擎

逻辑架构图:

 连接层:

mysql启动后(可以把mysql类比为一个后台的服务器),等待客户端请求,当请求到来后,mysql建立一个一个线程处理(线程池则分配一个空线程,当然也可使用nio线程模型。),每个线程独立,拥有独自内存空间。当请求为select请求则没有关系,但是请求为update时,多线程同时修改一块内存,就会引发一系列问题,由此引出 “锁“的概念。

查看mysql当前连接数:

show VARIABLES like '%max_connections%'

修改mysql连接数为200
set GLOBAL max_connections = 200

同时当客户端连接到mysql服务器时,服务器会对其进行权限验证,包括,ip,用户名,密码的验证,同时还要验证是否有对操作某一个库,表的权限。

SQL处理层:

show variables like '%query_cache_type%'

SET GLOBAL query_cache_size = 188888888;   

是否打开mysql查询结果缓存,默认关闭,打开后,mysql会对查询出来的结果进行缓存,实际应用中业务数据一般不在db层缓存

mysql默认打开sql解析缓存;平时我们说的sql缓存,一般指的sql解析缓存。

解析查询:

mysql对客户端传入的sql语句会按照一定的规则进行sql解析,而后进行sql优化,最后执行优化过的sql语句。而不是直接执行。

存储引擎:

show engines;查看存储引擎

MyISAM

进入show VARIABLES like 'datadir'  查看mysql数据文件所在路径,发现myisam引擎会生产三个数据文件,xxx.frm存储表结构文件,所有引擎都有此文件,xxx.MYD存储表数据文件,xxx.MYI存储表索引文件

特性:

并发性

支持表级锁,

支持全文检索,

支持数据文件压缩

试用场景:

只读类应用;

非事物行应用(数据仓库,报表,数据)

空间类应用(坐标)

 Innodb

 

show VARIABLES like 'innodb_file_per_table' 查看innodb表空间类型
set global innodb_file_per_table=off      设置innodb使用系统表空间

mysql5.6以前默认使用系统表空间

系统表空间无法简单的收缩文件大小。

独立表空可以通过optimize table 收缩系统文件

系统表空间会产生io瓶颈

独立表空间可以同时向多个文件刷新数据

推荐使用独立表空间

特性:

Innodb是一种事务性存储引擎

完全支持事物的acid特性

redo Log和Undo Log

Innodb支持行级锁(并发度更高)

试用场景

适合大多数的oltp应用。

 csv

 特点:

    以csv格式进行数据存储,

    所有列都不能为空,

    不支持索引,

    可以直接对数据文件直接编辑(直接修改文本文件,达到修改表的目的)。

create table mycsv(id int not null,c1 VARCHAR(10) not null,c2 char(10) not null)
engine=csv;
insert into mycsv values(1,'aaa','bbb'),(2,'cccc','dddd');
修改文本数据
flush TABLES;
select * from mycsv
create index idx_id on mycsv(id)

应用场景:

需要频繁导入导出表数据的场景,如财务报表类

Archive

应用场景:日志以及数据采集。

 Memory

show VARIABLES like 'max_heap_table_size' 查看memory引擎最大空间。

使用场景:

hash索引用于查找或者是映射表(邮编和地区对应)

用于保存数据分析中产生的中间表

用于缓存周期性聚合数据的结果表

memory数据容易丢失,所以要求数据可再生。

Ferderted

特点:提供了远程访问mysql服务器上表的方法

           本地不存储数据,数据全部放到远程服务器上

           本地需要保存表结构和远程服务器的连接信息

使用场景:边界数据库,表 同步

该引擎默认禁止,启用时需增加federated参数

表明,列名需要与远程表相同

CREATE TABLE `local_fed` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`c1` varchar(10) NOT NULL DEFAULT '',
`c2` char(10) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=federated CONNECTION
='mysql://root:[email protected]:3306/remote/remote_fed'

应用篇:锁,事物,索引   

待续。。。。。。

优化篇:慢查询,sql优化

 

猜你喜欢

转载自www.cnblogs.com/dw-haung/p/10143968.html