应用场景:通过主从同步日志确认某一目标时刻附近发生的某个表的具体更新内容
注释:1.由具体执行的SQL语句方式决定具体过滤规则,
比如我更新user_data表的SQL语句是15行的,则第一步取匹配行及其后15行
2.其后进一步过滤规则由具体业务和具体表结构决定
比如我第二步拿特定玩家id的更新记录
3.按时间戳排序也得依据具体情况设置sort参数
1.过滤匹配关键字"UPDATE user_data"的行及其后15行,存入result文件
mysqlbinlog mysqld-bin.000159 | perl -nle 'if(/UPDATE\s+user_data/){$h->{$.}=[];push @{$h->{$.}},$_;$max=$.}elsif($.-$max<=15){push @{$h->{$max}},$_} } BEGIN {$h=+{};$max=0} END {for(keys %$h){print @{$h->{$_}}[0..14]}' > result
2.从result中过滤出玩家id为173071953的记录,并替换所有空白为空格,存入result2文件
cat result | grep 173071953 | perl -nle 's/\s+/ /g;print' > result2
3.按修改时间戳排序打印更新语句,修改时间戳取前7位可查找与目标时间相距17分钟之内的数据库更新记录
cat result2 | grep "mod_date = '1357780" | sort -k 5
阅读(1312) | 评论(0) | 转发(0) |