MySQL binlog 写入机制
binlog 写入机制
- 事务执行过程中,先把日志写到 binlog cache。
- 事务提交的时候,再把 binlog cache 写入到 binlog 文件中。
每个线程有自己 binlog cache,但是共用同一份 binlog 文件。
- write,把日志写入到文件系统的 page cache,并没有把数据持久化到磁盘,所以速度比较快。
- fsync,真正将数据持久化到磁盘。
write 和 fsync 的时机,是由参数 sync_binlog 控制的:
- sync_binlog=0 的时候,表示每次提交事务都只 write,不 fsync。风险:日志会丢失。
- sync_binlog=1 的时候,表示每次提交事务都会执行 fsync。
- sync_binlog=N(N>1) 的时候,表示每次提交事务都 write,但累积 N 个事务后才 fsync。风险:可能丢失最近 N 个事务的 binlog 日志。