mysql binlog简单认识

作者: | 更新日期:

我的小组主要用来管理视频资料, 也就是管理Db的啦. 后来发现有很多慢查询, 于是导了一份慢查询和binlog来看了看.

本文首发于公众号:天空的代码世界,微信号:tiankonguse

背景

几个月前, 我曾多次找DBA, 说某些语句是慢查询, 需要优化.
后来DBA直接把我加到DBA的告警名单了, 一单有慢查询, 就会发出告警.
结果那段时间, 每个十几分钟就会收到一条告警, 然后我收集一下慢查询信息, 找相关人员来改造sql.
但是后来, 慢查询都集中到一个系统中去了, 然后那个系统怎么催都催不动, 理由是没时间.
催的旧了, 我催不动了, DBA发现没啥效果了, 就把告警阀值调整了一下, 改成几个小时告警一次了.

说了这么多废话, 当时查询资料时保存了一些书签,现在整理一下这些书签, 并记录一下binlog吧.

big log 结构

下面是我虚构的一条语句.

# at 383846410
#150414  7:00:00 server id 12303  end_log_pos 383846601 	Query	thread_id=3684309056	exec_time=0	error_code=0
SET TIMESTAMP=1428966000/*!*/;
update t_video_5  set c_value='',c_mtime=now() where c_value<>'' and ((c_id='324325' and c_idx=0))

第一行 at 383846410 代表一个这次sql事件的文件偏移量,或者开始位置.
第二行 分别是 日期, 事件, 服务id, 结束偏移量.
thread_id 代表哪个线程执行了这个事件, exec_time 代表这个时间在主库上执行的时间, 如果是从库, 这个时间也是在主库上的时间, 所以可能会比较大.
exec_time 的单位是秒, 当初我查这个单位查了好久, 所有的资料都说是时间, 但是单位呢, 都没说.最后在这里的例子中找到了答案.

mysqlbinlog 参数简单说明

我不是DBA, 也没有怎么操作过mysqlbinlog, 所以这里只是简单的查询资料, 简单的记录一下.

筛选指定数据库

-d, –database=name 参数可以筛选指定的数据库.

需要注意的是, 这个参数只能筛选使用 use database; 语句的sql, 对于 database.table 的sql语句是不能筛选出来的.

跳过指定条数据

-o, –-offset=# 可以通过偏移量来跳过指定数量的 entries .

筛选指定时间内的数据

通过 --start-datetime=datetime--stop-datetime=datetime 我们可以筛选指定时间内的 entries.

参考资料

本文首发于公众号:天空的代码世界,微信号:tiankonguse
如果你想留言,可以在微信里面关注公众号进行留言。

关注公众号,接收最新消息

tiankonguse +
穿越