通过BINLOG日志查找指定日期的SQL语句

通过BINLOG日志查找指定日期的SQL语句

在95数据库服务器查找posts.post_thread的postid=1652971,在 2013-02-24 日执行的对数据有修改的SQL语句

www.bitsCN.com

# grep datadir /etc/mysql/my.cnf

datadir                                         = /ssd/mysql

# cd /ssd/mysql

# mysql -A -e "show master status " | awk 'NR==2{print $1}' | awk -F. '{print $1}'

mysqld-bin  这里的内容为mysqlbinlog日志的前缀,因为如果是从数据库,还会有replylog.

找Binlog日志,取前一天的最后一个日志,以及24号创建的所有的日志

# ls –l

-rw-rw---- 1 mysql mysql 1075302338 Feb 22 04:00 mysqld-bin.000035

-rw-rw---- 1 mysql mysql 1092104643 Feb 22 14:10 mysqld-bin.000036

-rw-rw---- 1 mysql mysql 1073742083 Feb 23 00:06 mysqld-bin.000037

-rw-rw---- 1 mysql mysql 1073742129 Feb 23 05:26 mysqld-bin.000038

-rw-rw---- 1 mysql mysql 1073742102 Feb 23 15:30 mysqld-bin.000039

-rw-rw---- 1 mysql mysql 1073742095 Feb 24 01:36 mysqld-bin.000040

-rw-rw---- 1 mysql mysql 1076478877 Feb 24 09:00 mysqld-bin.000041

-rw-rw---- 1 mysql mysql 1087015180 Feb 24 15:00 mysqld-bin.000042

-rw-rw---- 1 mysql mysql 1073742090 Feb 25 01:31 mysqld-bin.000043

-rw-rw---- 1 mysql mysql 1073742037 Feb 25 08:47 mysqld-bin.000044

-rw-rw---- 1 mysql mysql 1073741919 Feb 25 15:45 mysqld-bin.000045

-rw-rw---- 1 mysql mysql 1073742218 Feb 26 03:36 mysqld-bin.000046

-rw-rw---- 1 mysql mysql  689342483 Feb 26 09:45 mysqld-bin.000047

这个时候我们需要分析的binlog日志为mysqld-bin.0000{39,4[0-2]}

# ls mysqld-bin.0000{39,4[0-2]}

mysqld-bin.000039  mysqld-bin.000040  mysqld-bin.000041  mysqld-bin.000042

# cat /root/findsql.sh

#!/bin/bash

BINLOGDIR=`cat /etc/mysql/my.cnf | grep datadir | awk '{print $3}'`

MYSQL="/usr/bin/mysql -A -e "

DATABASE="posts"

cd "${BINLOGDIR}"

BINLOGS=`ls mysqld-bin.0000{39,4[0-2]}`

for i in ${BINLOGS}

do

${MYSQL} "show binlog events in '${i}'" | grep "Query">>"${BINLOGDIR}/${i}.sql"

done

# chmod 755 /root/findsql.sh

先把binlog日志导出来,别做任何修改。至少这样的语句我们就认识了,然后再来搜索我们需要的语句。  www.bitsCN.com

# /root/findsql.sh

# ls mysqld-bin.0000{39,4[0-2]}.sql

mysqld-bin.000039.sql  mysqld-bin.000041.sql

mysqld-bin.000040.sql  mysqld-bin.000042.sql

在这些SQL中对数据进行筛选,这里的筛选需要看你自己的能力了,

会awk sed grep这三个就够了,awk建议必会。grep平时用的也特别多,应该不难。

# cat /root/parsesql.sh

#!/bin/bash

for i in `ls mysqld-bin.0000{39,4[0-2]}.sql`

do

awk -F 'use `posts`; ' '{print $2}' $i | grep -v 'chapterclick=chapterclick' | grep -v 'novelscore=novelscore' | grep 1652971 >> 1652971.sql

echo $i

done

# chmod 755 /root/parsesql.sh

# /root/parsesql.sh

1652971.sql这个里面的内容就是我们最后的成果

时间: 2024-07-28 20:39:23

通过BINLOG日志查找指定日期的SQL语句的相关文章

mysql 查询指定日期时间内sql语句实现原理与代码_php技巧

在数据库教程设计时必须注意时间字段为int(11)这样,保存在数据库的是一个数字型日期时间戳,我们可以用mktime函数求出当前日期的时间戳进行加减就OK了,下面看实例 //一个月 复制代码 代码如下: $lastMonth = mktime(date('h'),date('i'),date('s'),date('m')-1,date('d'),date('y')); $where .= " dtime > $lastMonth"; //三个月 复制代码 代码如下: $lastT

操作日期的SQL语句大全

  操作日期的SQL语句大全: 1.显示本月第一天 SELECT DATEADD(mm,DATEDIFF(mm,0,getdate()),0) select convert(datetime,convert(varchar(8),getdate(), 120)+'01',120) 2.显示本月最后一天 select dateadd(day,-1,convert(datetime,convert (varchar(8),dateadd(month,1,getdate()),120)+'01',12

mysql日期查询sql语句总结(查询一天,查询一周,查询一个月的数据)

我的日期 首先我们获取到的日期格式是这样的:2009-2-12或者2009-3-3或者2009-10-12,我们在组合sql语句的时候可以这样:(分了三个例子)  代码如下 复制代码 @1select * from user where birthday>'2009-2-3' and birthday<'2009-4-3' 这样我们能够查到所有包括2009-2-3并且大于2009-2-3的所有的用户信息. @2如果我们是这样组合的  代码如下 复制代码 select * from user w

mysql unix准换时间格式查找指定日期数据代码_Mysql

复制代码 代码如下: select * from table where DATE_FORMAT(FROM_UNIXTIME(createtime),'%Y-%m-%d')='2014-01-02' FROM_UNIXTIME使用语法 FROM_UNIXTIME(unix_timestamp,format) FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format)是MySQL里的时间函数 ,unix_timestamp

mysql unix准换时间格式查找指定日期数据代码

select * from table where DATE_FORMAT(FROM_UNIXTIME(createtime),'%Y-%m-%d')='2014-01-02' FROM_UNIXTIME使用语法 FROM_UNIXTIME(unix_timestamp,format) FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format)是MySQL里的时间函数 ,unix_timestamp可以是字段名,也可以直

学习ASP关于日期操作SQL语句小结

sql|日期|语句 列出某一天, 上一星期的数据 SELECT distinct dateandtime FROM ctdate_by_query_date WHERE dateandtime between ((#2006-5-15#+(Weekday(2006-5-15)-7))-6) and (#2006-5-15#-7)+Weekday(2006-5-15) sql="SELECT distinct dateandtime FROM ctarticle WHERE dateandtime

SQL Server日期计算sql语句总结(1/2)

第一天(DATEFIRST)设定决定了你的系统使用哪一天作为一周的第一天.所有以下的例子都是以星期天作为一周的第一天来建立,也就是第一天设置为7.假如你的第一天设置不一样,你可能需要调整这些例子,使它和不同的第一天设置相符合.你可以通过@@DATEFIRST函数来检查第一天设置. 我们先复习一下DATEDIFF和DATEADD函数. •DATEDIFF函数计算两个日期之间的小时.天.周.月.年等时间间隔总数. •DATEADD函数计算一个日期通过给时间间隔加减来获得一个新的日期. 要了解更多的D

日期时间转换为日期的SQL语句

语句|转换 --每个分解在合并select CONVERT(datetime, DATENAME(yyyy,getdate()) + '-' + DATENAME(mm,getdate()) + '-' + DATENAME(dd, getdate())) --取有效部分转换select convert(datetime,left(convert(varchar(10),getdate()),10)) --问题:有没有更好的?

MySQL的binlog日志

binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的. 一般来说开启二进制日志大概会有1%的性能损耗(参见MySQL官方中文手册 5.1.24版).二进制有两个最重要的使用场景: 其一:MySQL Replication在Master端开启binlog,Mster把它的二进制日志传递给slaves来达到master-slave数据一致