Mysql binlog浅析

什么是binlog?
全称Binary Log ,包含描述数据库更改的事件,表创建操作和表修改

在哪里产生?
产生于mysql的server层

mysql有两层结构:
1、server层:包含连接器、查询缓存、解析器、优化器、执行器
2、存储引擎:InnoDB、MyISAM等

mysql的两阶段提交【innodb】
1、mysql client 提交修改数据的请求到server层
2、server将修改指令进行解析优化发送到执行引擎
3、执行引擎将修改结果更新到内存
4、redo.log中记录在数据页上进行的修改,并将这行记录的状态置为prepare
5、执行引擎通知server修改完成,可提交事务
6、server层发起提交事务
7、redo.log中将这条记录的状态修改成commit状态

binlog包含两种文件:
索引文件:记录哪些日志文件正在被使用
日志文件:记录除了查询语句的所有语句事件

binlog三种格式
statement,最后有 commit,记录为基本语句。准确性差,对一些系统函数不能准确复制或不能复制,如now()、uuid()、limit(由于mysql是自选索引,有可能master同salve选择的索引不同,导致更新的内容也不同)等
row格式,记录为基于行。日志文件大,较大的网络IO和磁盘IO
MIXED,混合模式。当binlog format 设置为mixed时,普通复制不会有问题,但是级联复制在特殊情况下会binlog丢失。

修改binlog格式
SET GLOBAL binlog_format = 'STATEMENT'; 基于当前启动的mysql的
SET SESSION binlog_format = 'STATEMENT'; 基于当前请求session的

查看binlog是否开启
show variables like 'log_bin';

删除binlog

自动删除:expire_logs_days

手动删除:
mysql> reset master; //删除master的binlog,即手动删除所有的binlog日志
mysql> reset slave; //删除slave的中继日志
mysql> purge master logs before '2019-07-07 17:20:00'; //删除指定日期以前的日志索引中binlog日志文件
mysql> purge master logs to 'binlog.000003'; //删除指定日志文件的日志索引中binlog日志文件

确认正在使用的binlog
show master status;

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务