Binlog详解
https://www.bilibili.com/video/BV1tN411Z7iJ?p=3 视频地址
使用场景
① 主从复制 : 在主库中开启BInlog功能,然后主库将Binlog传给从库,从库拿到Binlog后实现数据恢复。
② 数据恢复 :利用mysqlbinlog工具来恢复数据。或者binlog2sql工具
③ 审计 (判断注入攻击)
记录模式
① Row: 日志中会记录每一行数据被修改的情况。
优点: 清楚滴记录每一行数据的修改细节,可靠,可以完全实现主从数据数据同步和恢复
② statement:记录sql语句
优点:日志量小、减少磁盘io,主从还可以减少网络io。 为什么日志量少? 比如一次性插入10行记录,Row类型则需要为每行生成日志,而statement则一条语句即可。
缺点:存在风险。 比如 now()函数、随机数等不能复原
③ mixed:以上两种模式混合
主要用statement类型,在遇到now()、随机数这种无法恢复的就用row类型
建议使用Row类型!!!!!
Binlog文件结构(了解即可)
BInlog写入机制
-
根据记录模式和操作触发event事件生成log event (事件触发并行机制)
-
将事件执行过程中产生log event写入缓冲区,每个事务线程都有一个自己的缓冲区
log event保存在一个binlog_cache_mng数据结构中,该结构中分为两个缓冲区,一个是stmt_cache(存放不支持事务的);另一个是trx_cache(支持事务的)。 分两个缓冲区是因为,binlog是逻辑日志,既可以支持事务的存储引擎(innodb),也可以支持不支持事务的(myIsam)
-
事务在提交阶段会将产生的log event写入到外部的binlog文件中。
注意: 不同事物以串行的方式将log event写入binlog文件中,所以一个事务包含的log event信息在binlog文件中时连续的,中间不会插入其他事务的log
Binlog文件操作
查看相关参数
show variables like “%log_bin%”
查看日志文件
show binary logs 或者 show master logs
看当前在用哪个日志文件
show master status
查看日志文件
show binlog events in ‘文件名’
Redolog 和 Binlog的区别
- redolog 属于Innodb引擎, binlog属于Mysql Server的自带功能,并且是以二进制文件记录
- redolog是物理日志记录该数据页更新状态内容, binlog是逻辑日志,记录更新过程
- redolog是循环写,日志空间大小固定。 binlog是追加写入,写完一个写下一个,不会覆盖使用
- redolog作为服务器异常宕机后事务数据自动恢复使用,binlog可以作为主从复制、数据恢复使用,但是binlog没有自动crash-safe能力