重做日志(redo log)
保证持久性
write_pos标志到了日志结尾
checkpoint标志到了日志开头
当write_pos追上checkpoint时,表示redo log日志已经写满。这时不能继续执行新的数据库更新语句,需要停下来先删除一些记录,执行checkpoint规则腾出可写空间。
checkpoint规则:checkpoint触发后,将buffer中脏数据页和脏日志页都刷到磁盘。
脏数据:指内存中未刷到磁盘的数据。
缓冲池(buffer pool)
在内存中分配的一个区域,包含了磁盘中部分数据页的映射,作为访问数据库的缓冲。
当请求读取数据时,会先判断是否在缓冲池命中,如果未命中才会在磁盘上进行检索后放入缓冲池;
当请求写入数据时,会先写入缓冲池,缓冲池中修改的数据会定期刷新到磁盘中。这一过程也被称之为刷脏 。
当数据修改时,除了修改buffer pool中的数据,还会在redo log中记录这次操作
如果MySQL宕机,重启时可以读取redo log中的数据,对数据库进行恢复
redo log日志可分为两个部分
一是存在易失性内存中的缓存日志redo log buff
二是保存在磁盘上的redo log日志文件redo log file。
既然redo log也需要存储,也涉及磁盘IO为啥还用它?
redo log 的存储是顺序存储,而缓存同步是随机操作。
缓存同步是以数据页为单位的,每次传输的数据大小大于redo log。
回滚日志(undo log)
利用undo log中的信息将数据回滚到修改之前的样子
保证原子性
主从复制
主从复制的原理实际上就是通过bin log日志实现的
bin log日志中保存了数据库中所有SQL语句,通过对bin log日志中SQL的复制,然后再进行语句的执行即可实现从数据库与主数据库的同步。
主从复制的过程主要是靠三个线程进行的
一是运行在主服务器中的发送线程,用于发送binlog日志到从服务器
二是从服务器上的I/O线程用于读取主服务器发送过来的binlog日志内容,并拷贝到本地的中继日志中
三是从服务器上SQL线程用于读取中继日志中关于数据更新的SQL语句并执行,从而实现主从库的数据一致。
分支主题
好处
1. 通过复制实现数据的异地备份,当主数据库故障时,可切换从数据库,避免数据丢失。
2. 可实现架构的扩展,当业务量越来越大,I/O访问频率过高时,采用多库的存储,可以降低磁盘I/O访问的频率,提高单个机器的I/O性能。
3. 可实现读写分离,使数据库能支持更大的并发。
4. 实现服务器的负载均衡,通过在主服务器和从服务器之间切分处理客户查询的负荷。