第一讲 mysql 连接池
1 mysql 驱动的直观介绍
访问数据库时,java程序需要与数据库建立连接。该工作由mysql驱动完成。
2 实际场景
多个线程执行sql语句都需要建立连接。
如果建立连接之后,销毁连接,效率不高。数据库连接池可以解决该问题。

常见的数据库连接池有C3P0、Druid等。
作业:写代码与 mysql 建立连接。
第二讲 sql 语句的处理流程
SQL执行器是非常核心的组件。执行器和存储引擎配合,完成一个sql语句相对应的,在内存和磁盘的全部数据更新操作流程。
必须有线程监听请求,从请求中读取 sql,然后转交给SQL接口执行。
第三讲 innoDB 的架构设计
缓冲池
1 读数据到buffer pool,加锁
2 写 undo
3 修改记录
4 写 redo
5 redo 刷盘
日志刷盘策略
设置 innodb_flush_log_at_trx_commit 参数(默认为1)
0:事务提交时,不刷 redo log 到磁盘。内存数据和 buffer 数据可能丢失。
1:事务提交时,redo log buffer 的数据刷到磁盘。
2:事务提交时,redo log buffer 的数据写入 os cache,每秒执行一次 flush。
redo/undo log 属于 innoDB引擎特有的日志文件。
第四讲 mysql binlog
binlog 概念
redo log 是innoDB 特有的,记录了对某个数据页的数据项的操作。
binlog 是mysql server层的,记录的是对某个表中某一行的操作及更新后的值。
提交事务写binlog
执行器是非常核心的组件,和存储引擎配合完成数据更新时内存和磁盘操作的全流程。
1-4 阶段都是更新数据阶段的操作。
5、6 阶段的 redo log 和 binlog 都是在提交事务阶段进行的操作。
binlog 刷盘策略
设置 sync_binlog,默认设置为0
0:提交事务时,binlog写入os内存缓存。
1: 提交事务时,binlog强制写入磁盘。
完成事务提交的标志
binlog 写入磁盘,binlog日志写入redo log日志文件,redo 日志文件写入 commit 标志。
如果没有commit 标志,意味着事务提交失败。
刷脏数据
后台IO线程随机将buffer pool里的脏数据刷到数据文件。
即便mysql崩溃,重启之后,根据redo log可以恢复数据。
