binlog相关知识

1、binlog相关操作

查询操作:
mysql> show master status; //查看当前正在写入的binlog文件

mysql> show binlog events in ‘mysql-bin.000002’; //查看指定binlog文件的内容

mysql> show binary logs; //获取binlog文件列表

mysql> show master logs; //查看master的binlog日志

删除操作:

自动删除binlog
通过binlog参数(expire_logs_days )来实现mysql自动删除binlog
mysql> show binary logs;
mysql> show variables like ‘expire_logs_days’;
mysql> set global expire_logs_days=3;

手工删除binlog
mysql> reset master; //删除master的binlog
mysql> reset slave; //删除slave的中继日志
mysql> purge master logs before ‘2012-03-30 17:20:00’; //删除指定日期以前的日志索引中binlog日志文件
mysql> purge master logs to ‘binlog.000002’; //删除指定日志文件的日志索引中binlog日志文件
或者直接用操作系统命令直接删除

2、TABLE_MAP_EVENT

当用户提交一条修改语句时(如, insert, update, delete),MySQL会产生2个Binlog事件: 第一个就是TABLE_MAP_EVENT,用于描述改变对应表的结构(表名, 列的数据类型等信息);紧接着的是ROWS_EVENT,用于描述对应表的行的变化值

table_map_log_event的格式如下图所示:

2.1. table id
用于唯一标识一个表的结构,table id是MySQL自动递增分配的。需要注意的是,table id唯一标识的是一个表结构,而不是实际的数据库表。如,一个普通表tpcc.my_test1, 如果在MySQL实例运行期间,没有发生结构变化(DML),那么它的table id就不会变化;但结构发生变化后,会生成新的TABLE_MAP_EVENT,并且使用新的table id标识。在ROW格式的二进制中,事件信息中没有列的信息,需要通过Table_Map将表名对应的表信息加载到cache中,然后根据事件信息中的列下标来定位到数据列。

在基于行的复制模式下,为什么BINLOG中使用TABLE_ID而不直接使用表名:

1、如果某事务中一条SQL语句修改了100万行记录,那么会在该事务对应的BINLOG中记录这100万记录相应的信息,通过TABLE_ID方式来映射表名,那么仅需要存储一次表名即可,后面的使用TABLE_ID代替,可以有效降低BINLOG长度。

导致TABLE_ID发生变化的操作有:

1>DDL语句执行 (创建表的时候用到的一些sql,比如说:CREATE、ALTER、DROP等)
2>Flush Tables语句执行
3>Table被加载到Table Cahche

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值