一 mysql 体系结构和存储引擎
1.1 数据库和实例
数据库是指代存储数据的各种文件
实例就是数据库的后台线程以及一个共享内存区组成,也就是一个进程,可以用ps -ef|grep mysqld 查看实例进程的详细信息。
linux上读取配置文件的顺序 /etc/my.cnf->/etc/mysql/my.cnf->/usr/local/mysql/etc/my.cnf->~/.my.cnf 如果文件都存在,会默认使用最后一个存在配置文件的配置。
Mac版的 mysql8已经不会生成默认配置文件
datadir在linux系统中默认为/usr/local/mysql/data,data文件夹只是一个链接,指向了/opt/mysql_data/
1.2 体系结构
Mysql主要有以下几部分组成
1 连接池组件
2 管理服务和工具组件
3 sql 接口组件
4 查询分析器组件
5 优化器组件
6 缓冲组件 cache
7 插件式存储引擎
8 物理文件
1.3 存储引擎类型
1 innodb引擎
主要用oltp 在线事务处理
支持行锁,非锁定读,多版本控制(mvcc),支持事务。
支持四种隔离级别,读未提交,读已提交,可重复度,串行读,利用插入缓冲(insert buffer),二次写(double write),自适应哈希索引(adaptive hash index),预读(read ahead)来提高性能。
利用next-keylocking的策略避免幻读
2 MyISAM引擎
主要用olap 在线数据分析
不支持事务,表锁设计。
存储引擎表由myi,myd文件组成,myd存储数据文件,myi存储索引文件。
3 NDB存储引擎
NDB存储引擎是一个集群引擎。
4 Memory存储引擎
Memory存储引擎将数据都存储在内存中,一旦数据库重启或者崩溃,数据就会消失,一般只用来存储临时数据。默认的索引方式是自适应哈希索引,不支持行锁,不能使用text blob类型数据,如果使用了,则该表就会自动转为MyISAM引擎的表,使用变长数据依旧会按照定长数据存储。
5 Archive
只支持insert和select,mysql5.1开始支持索引
6 Federated
指向远程mysql表,只支持mysql表
7 Maria
MyISAM引擎升级版,支持行锁,缓存和索引文件,mvcc。
1.4 各种存储引擎的区别
对于事务
BDB和InnoDB支持,MYISAM不支持
锁
MYISAM和Memory都是表锁
BDB是page锁
InnoDB和NDB支持行锁。
1.5连接mysql
本节主要讲了连接mysql的几种方式,连接mysql的操作实际上就是一个连接进程和mysql实例的通信过程,也就是进程通信,进程通信主要管道,命名管道,命名字,TCP/IP套接字,UNIX域套接字。
Mysql连接主要有
1 tcp/ip
Tcp/ip是最常用的方式,jdbc连接数据库就是基于此。
2 命名管道和共享内存
在一些早起的windows版本上。
3 unix域套接字
linux和unix环境下。