一、mysql架构之组件
1、SQL接口
它是mysql自己定义的一个专门用于处理增删改查操作的数据库组件。
2、SQL解析器
该组件的功能是将我们写的SQL语句转换成mysql能看懂的语言。
3、查询优化器
该组件可以使SQL执行选择最优路径,确定应该怎样执行SQL。
4、存储引擎
存储引擎是mysql的核心组件,存储引擎是用来执行SQL语句的,它可以操作内存和磁盘中的数据。
5、SQL执行器
该组件是用来调用存储引擎接口,来具体执行SQL语句。
6、binlog日志
归档日志,用于记录数据库中的数据变动信息,使用sync_binlog来控制刷盘策略,其中
0代表提交表示MySQL不控制binlog的刷新,由文件系统自己控制它的缓存的刷新,
1代表示每次事务提交,MySQL都会把binlog刷下去,是最安全但是性能损耗最大的设置,
N表示每写N次操作系统缓冲就执行一次刷新操作。
二、InnoDB存储引擎介绍
buffer pool
buffer pool是InnoDB引擎的重要内存结构,mysql所有的增删改查都是基于缓冲池来进行的,当需要操作某一条数据时,会将该数据所在的数据页
加载到内存中,然后基于缓冲池来进行增删改查操作。
undo log日志
用于记录更新前的数据,主要用于事务的回滚和mysql关于并发事务处理的MVCC机制。
redo log日志
该日志是用来记录你修改的数据,防止buffer pool中的数据未刷入磁盘时,mysql突然宕机等情况造成的数据丢失,该日志可以用于恢复你更新过的数据。
redo log buffer
这也是一个放到内存中的缓存空间,该缓存主要用于存放数据操作时生成的redo log日志。既然redo log是用来防止buffer pool中的数据丢失的,那么同样
的redo log buffer中的数据也会面临数据丢失的问题,针对redo log buffer中的数据,mysql提供了innodb_flush_log_at_trx_commit来控制刷盘策略,
innodb_flush_log_at_trx_commit=0,在提交事务时,InnoDB不会立即触发将缓存日志写到磁盘文件的操作,而是每秒触发一次缓存日志回写磁盘操作,并调用操作系统fsync刷新IO缓存。
innodb_flush_log_at_trx_commit=1,在每个事务提交时,InnoDB立即将缓存中的redo日志回写到日志文件,并调用操作系统fsync刷新IO缓存。
innodb_flush_log_at_trx_commit=2,在每个事务提交时,InnoDB立即将缓存中的redo日志回写到日志文件,但并不马上调用fsync来刷新IO缓存,而是每秒只做一次磁盘IO缓存刷新操作。
一般推荐设置为1
三、数据更新流程
四、推荐一个很优秀的mysql数据库专栏儒猿技术窝mysql专栏