mysqlbinlog

时间:2024-08-11 14:04:50

一、描述

  转换二进制日志为易读的文本格式或用于管道后恢复数据

二、用法

-d, --database=name     仅列出指定数据库的条目

--start-datetime=name   从指定时间开始读取事件,name必须是datetime或timestamp格式

-j, --start-position=#  从指定位置开始读取事件

--stop-datetime=name    在指定时间前停止读取事件,name必须是datetime或timestamp格式

--stop-position=#       在指定位置前停止读取事件

-H, --hexdump       转换输出为十六进制

三、二进制内容说明

mysqlbinlog mysql.000001

STATEMENT形式

# at 141
#100309 9:28:36 server id 123 end_log_pos 245 Query thread_id=3350 exec_time=11 error_code=0

第一行:at num表示起始位置或偏移量

第二行:date+time 发生时间,server id 服务器标识,end_log_pos 当前事件结束的位置偏移量,也是下个事件开始的位置,thread_id 执行该事件的线程,

exec_time 执行该事件花费的时间,error_code 执行改时间的状态值,0表示成功

四、分析每张表的DML stats(没有select)

mysqlbinlog /path/to/mysql-bin.000999 | \
grep -i -e "^update" -e "^insert" -e "^delete" -e "^replace" -e "^alter" | \
cut -c1-100 | tr '[A-Z]' '[a-z]' | \
sed -e "s/\t/ /g;s/\`//g;s/(.*$//;s/ set .*$//;s/ as .*$//" | sed -e "s/ where .*$//" | \
sort | uniq -c | sort -nr 33389 update e_acc
17680 insert into r_b
17680 insert into e_rec
14332 insert into rcv_c
13543 update e_rec
10805 update loc
3339 insert into r_att
2781 insert into o_att
...

参考

http://dev.mysql.com/doc/refman/5.5/en/mysqlbinlog.html