mysqlbinlog分析
使用和不使用--base64-output=decode-rows的区别:# mysqlbinlog--base64-output=decode-rows ./mysql
-bin.000003 >base_rows.log
# mysqlbinlog./mysql-bin.000003 >nobase_rows.log
用对比工具分析两个log的结果:
可以知道row-format的binlog消失了。
因此:
# mysqlbinlog --base64-output=decode-rows -v ./mysql-bin.000003
可以注释掉row-format的binlog,出现可识别的sql(不过也是注释的)
再继续通过分析binlog
# mysqlbinlog --base64-output=decode-rows -v ./my
sql-bin.000003|grep -e "^##* UPDATE" -e "^##* INSERT" -e "^##* DELE
TE" -e "^##* REPLACE" -i -e "^update" -e "^insert" -e "^delete" -e "^re
place"
### INSERT INTO zsd.user
### INSERT INTO zsd.user
### INSERT INTO zsd.user
### INSERT INTO zsd.user
### INSERT INTO zsd.user
### INSERT INTO zsd.user
可以把每条的记录(update,insert,delete,replace)都可以统计出来。
其中:
grep指令:
-e, --regexp=PATTERN use PATTERN as a regular expression
-i, --ignore-case ignore case distinctions (忽视大小写差别) 学习awk指令:
awk例子:
# vi test
wo zhang sheng dong
# cat ./test |awk -F ' ' '{print $1,$2,$3}'
wo zhang sheng
这里awk的意思是:以空格为分界符,输出前三个域。
学习sed指令:基本用法
# vi test2
###zhang
###liu
###hu
# cat test2 |sed 's/^##*//g'
zhang
liu
hu
sed指令有着替换的功能:类似的例子:s/pig/cow/g (意思:把pig变成cow) 基于awk和sed命令的使用,我在继续分析mysql日志,可以得到:
# mysqlbinlog --base64-output=decode-rows -v ./my
sql-bin.000003|grep -e "^##* UPDATE" -e "^##* INSERT" -e "^##* DELE
TE" -e "^##* REPLACE" -i -e "^update" -e "^insert" -e "^delete" -e "^re
place"|awk -F ' ' ' { print $1,$2,$3,$4}' |sed 's/^##*//g'
INSERT INTO zsd.user
INSERT INTO zsd.user
INSERT INTO zsd.user
INSERT INTO zsd.user
INSERT INTO zsd.user
INSERT INTO zsd.user
UPDATE zsd.user
DELETE FROM zsd.user
替换掉前面所用的'###' 使用tr '' '' (把所有的大写字母变成小写)
# mysqlbinlog --base64-output=decode-rows -v ./my
sql-bin.000003|grep -e "^##* UPDATE" -e "^##* INSERT" -e "^##* DELE
TE" -e "^##* REPLACE" -i -e "^update" -e "^insert" -e "^delete" -e "^re
place"|awk -F ' ' ' { print $1,$2,$3,$4}' |sed 's/^##*//g'|tr '[A-Z
]' ''
insert into zsd.user
insert into zsd.user
insert into zsd.user
insert into zsd.user
insert into zsd.user
insert into zsd.user
update zsd.user
delete from zsd.user
学习sed命令,基础第二阶:
sed -e "s/\t/ /g;s/\`//g;s/(.*$//;"
其中-e:
-e script, --expression=script
add the script to the commands to be executed
上面的命令:"s/\t/ /g;s/\`//g;s/(.*$//;" 得拆分看:
s/\t/ /g; (把制表符换成空格)
s/\`//g;(把`换成空)
s/(.*$//; (把(.*----.*为捡破烂模式,通吃所有的字符串.)
例子:
# vi test3
`zhangshengdong(..???\\zkdkjsdji%##
# cat ./test3 | sed -e "s/\t//g;s/\`//g;s/(.*$//;"
zhangshengdong 然后,再继续分析binlog日志:
mysqlbinlog --base64-output=decode-rows -v ./mysql-bin.000003\
|grep -e "^##* UPDATE" -e "^##* INSERT" -e "^##* DELETE" -e "^##* \
REPLACE" -i -e "^update" -e "^insert" -e "^delete" -e "^replace"|\
awk -F ' ' ' { print $1,$2,$3,$4}' |sed 's/^##*//g' | tr '' '' \
|awk -F ' ' ' { if($1=="update") {$3=""} print $1,$2,$3}' \
|sed -e "s/\t/ /g;s/\`//g;s/(.*$//;s/*\.//;s/ set .*$//;s/ as .*$//" \
insert into user
insert into user
insert into user
insert into user
insert into user
insert into user
update user
delete from user
(把前面的zsd.都祛除了) sort命令:
sort -nr
-n, --numeric-sort compare according to string numerical value
-r, --reverse reverse the result of comparisons
例子:
# cat finally.log
insert into user
insert into user
insert into user
insert into user
insert into user
insert into user
update user
delete from user
# cat finally.log |sort
delete from user
insert into user
insert into user
insert into user
insert into user
insert into user
insert into user
update user
# cat finally.log |sort |uniq -c
1 delete from user
6 insert into user
1 update user
# cat finally.log |sort |uniq -c |sort -nr
6 insert into user
1 update user
1 delete from user
页:
[1]
2