零、安装mysql
下载地址:dev.mysql.com/downloads/m…
mac启动配置:系统偏好-mysql,通过configuration选项可以查看安装路径,安装过程需要给root配置一个密码
启动:mysql -u root -p
一、mysql体系及引擎
1.1数据库&&实例
- 数据库:文件
- 实例:操作数据库的进程,多线程架构
- 如下图:1550为mysql进程号
- mysql各个配置文件路径,如下图
配置在各个文件如果不同,按照最后一个为准,没有配置文件,按照编译默认参数运行mysql
- 查看msyql目录,先添加权限
sudo chown -R $(whoami) /usr/local/mysql
1.2mysql体系
mysql区别于其他数据库,提供了插件式引擎,pluginable storage engine,引擎式基于表的。
1.3存储引擎
存储引擎是开源的,用户可以根据应用场景自己选择、修改、甚至自己编写。innnodb就是最著名的第三方引擎,后被oracle收购。
简单介绍了几种引擎
- innodb:支持事物,mvvc
- myisam:不支持事务
- ndb:集群,内存存储
- memory:内存型
- archive:只支持insert,select,压缩比高
- federated:指向远程服务器,本身不存数据
- maria:创始人michael widenus开发,旨在取代myisam,支持事务、mvcc
- 其他
1.4各存储引擎间的比较
各引擎比较,如下图
查看当前数据库支持的引擎
同样创建一张表,使用不同的引擎,占用的存储空间不同
1.5mysql链接方式
实质是进程间的通信方式
- tcp/ip
- 套接字:对fd or tcp/ip抽象封装
- 管道:存在内存中的fd
二、innodb
mysql的默认引擎是innodb
innodb体系结构如下图
后台线程
- master thread:
- io thread:aio
- purge thread:回收undo页
- page cleaner thread:脏页刷新
内存
- 缓冲池
- lrulist(存储热点数据)、freelist、flushlist(存储脏页回写)
- redo log buffer
- 额外缓冲
checkpoint机制:设定合适的参数,将脏页回写到磁盘
innodb的关键特性
- 插入缓冲:提高非聚集不唯一索引的插入性能,因为非聚集索引可能不再同一个页,b+树实现
- 两次写double write:防止刷盘页的部分成功,部分失败的问题。
- 自适应hash:热点数据进行hash索引
- 异步io
- 刷新邻接页
启动、关闭、恢复参数设置
三、文件
参数文件
- 查看参数文件列表:mysql mysql --help | grep my.cnf
- 查看参数
日志文件
- 错误日志
- 慢查询日志
慢查询时间阈值设定
慢查询日志查看
binlog 二进制文件
socket文件
pid文件
表文件
- 表空间文件 frm
- redo log
四、表
_rowid默认创建主键id
表
共享缓冲表空间:undo信息、事务信息
每张表空间射者
段
区
页
行格式row_format
compact
除下面字段,还有row-id,事务id,回滚指针
redundant
行溢出
后续版本出现了compressed、dynamic、char存储结构
页结构
约束
主键、外键、唯一索引、not null
视图、物化视图
分区
range
list
hash
key
column
五、索引
b+树:保证矮胖、减少io
全文
hash
聚集索引
非聚集索引
联合索引
覆盖索引
六、锁
共享锁 s lock
排他锁 x lock
行锁
表锁
意向锁:上x行锁,必意向表锁,提高事务上锁效率
mvcc:repeatable - commit 表现不同
一致性非锁定读;有了mvcc,读不依赖另外一个事务释放锁
一致性锁定读:select for update , select for share mode
record lock
gap lock: 防止多个事务在一个范围内插入数据
next key lock:record lock+ gap lock,防止在repeatable 级别下产生幻读
脏读
不可重复读
丢失更新:两个事务对相同的记录修改,后发先至,更新覆盖,解决办法是加x锁
死锁
七、事务
redo log、undo log 保证事务的原子性、持久性、一致性。
undo log 是mvcc的一部分