一、描述
转换二进制日志为易读的文本格式或用于管道后恢复数据
二、用法
-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