`

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

阅读更多

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

 

# 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日志导出来,别做任何修改。至少这样的语句我们就认识了,然后再来搜索我们需要的语句。

# /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这个里面的内容就是我们最后的成果

分享到:
评论

相关推荐

    mysql数据库恢复 binlog2sql数据库恢复

    例如,`binlog2sql --host=localhost --user=root --password=password --start-position=start_pos --stop-position=end_pos > output.sql`,这将把指定范围内的binlog事件转换为SQL语句并输出到output.sql文件。...

    MySQL利用binlog恢复库表

    1. **查找binlog日志文件**: 使用`mysqlbinlog`工具查看包含删除操作的日志文件,例如: ```bash mysqlbinlog /var/lib/mysql/mysql-bin.000001 ``` 2. **定位删除操作**: 查看输出,找到执行删除操作的...

    Mysql binlog查看工具

    5. **导出和备份**:将binlog事件转换为可读性强的格式(如SQL语句),便于进一步分析或备份。 在实际操作中,如果你遇到数据库故障或需要从binlog恢复数据,这些工具能大大提高效率。例如,当数据库因意外丢失或...

    MySQL Binlog Digger 4.4.zip

    6. **性能分析**:通过分析二进制日志,可以评估数据库的性能瓶颈,比如找出耗时较长的SQL语句,为优化数据库性能提供依据。 7. **可视化界面**:4.4版本可能提供了更完善的图形用户界面,使操作更加直观,降低使用...

    MySQL-运维MySQL-运维MySQL-运维

    STATEMENT 基于 SQL 语句的日志记录,记录的是 SQL 语句,对数据进行修改的 SQL 都会记录在日志文件中。ROW 基于行的日志记录,记录的是每一行的数据变更。(默认)MIXED 混合了 STATEMENT 和 ROW 两种格式,默认...

    MySQL二进制日志查看工具

    1. **查看事件内容**:通过指定日志文件名和起始位置,可以输出二进制日志中的SQL语句或者其他事件。 2. **转储日志**:将二进制日志转换为可读的SQL语句,便于理解或执行。 3. **比较日志**:对比不同时间点的日志...

    MySQL日志分析软件 baretail pro 专业版(非破解已注册)

    在使用Baretail Pro进行MySQL binlog分析时,首先需要确保binlog日志已经启用并且正确配置。然后,可以将binlog文件导入到Baretail Pro中,利用其实时更新和搜索功能来监控SQL操作。如果需要,还可以设置警报,以便...

    MySQL 数据库误删除后的数据恢复操作说明(详细)

    4. **恢复流程**:先恢复全量数据,再按照时间顺序逐步恢复增量数据,期间需要仔细检查并移除任何可能引起问题的SQL语句。 通过遵循上述步骤,即使在遇到误删除等紧急情况时,也能最大程度地减少数据丢失的风险,并...

    Linux上通过binlog文件恢复mysql数据库详细步骤

    例如,你可以通过`--start-datetime`选项指定从某个时间点开始读取日志,或者通过`--stop-datetime`选项设置停止时间点。此外,还可以使用`--start-position`和`--stop-position`选项根据日志文件中的事件位置进行...

    实战演练MySQL被误删的表、库恢复 将数据库恢复到指定的时间点

    - 使用MySQL的binlog工具来获取误删语句的细节,并构造出反转的SQL语句。例如,可以通过以下命令构造插入语句:`mysqlbinlog -vv binlog_file`。 - 根据输出结果,手动构造反转的SQL语句,如:`INSERT INTO user ...

    MYSQL日志与备份还原问题详解

    数据恢复是通过重新执行备份文件中的SQL语句来实现的。例如,如果误删了数据库中的表,可以将之前备份的SQL文件导入到数据库中,执行恢复操作。对于不同环境和需求,MySQL提供多种恢复策略,如全量备份、增量备份和...

    从MySQL ROW二进制日志还原更新。Undelete-Mysql.zip

    这种格式的好处在于它不依赖于特定的SQL语句,而是记录了实际的数据变化,因此在某些情况下,如表结构改变或无法还原SQL语句时,ROW格式更有优势。 在“Undelete-Mysql.zip”压缩包中,包含的项目“MyUndelete-...

    教你自动恢复MySQL数据库的日志文件(binlog)

    mysqlbinlog是一个用来处理二进制日志文件的实用工具,它能够读取并执行二进制日志文件中的SQL语句,从而实现数据的恢复。你可以在命令行中使用如下命令来指定恢复时间: mysqlbinlog --start-date="2005-04-20 9:...

    mysql update语句的执行过程详解

    binlog记录所有改变数据库状态的SQL语句,以供从库同步使用。在两阶段提交中,binlog写入磁盘并确认后,事务才真正提交。 在高并发环境中,这种日志机制优化了更新操作,降低了磁盘I/O和查找成本。通过redo log的...

    掌握MySQL的安装.pdf

    【实验 1-7】查看日志内容:通过命令行,如 tail -f binlog.000001 查看二进制日志,mysqladmin -u root -p slowlog flush 用于清空慢查询日志,然后使用 tail -f slow.log 查看慢查询记录。general.log 文件通常...

    MySQL线上常见故障剖析

    - 通过slow log等日志文件查找正在执行的SQL语句。 3. **操作系统层面** - **内存状态** - /proc/meminfo: 显示内存使用情况。 - SWAP: 检查是否存在大量页交换。 - **CPU使用率** - Load: 监控系统负载情况...

    mysql从删库到恢复

    3. 要确定恢复的起点和终点,通过`mysqlbinlog`命令查看binlog文件,找到与`testlzj`相关的创建和删除数据库的语句。创建数据库的开始位置为5759,结束位置为1115426。 4. 使用`mysqlbinlog`命令,指定开始和结束...

    mysql 找回误删表的数据方法(必看)

    2. **使用 mysqlbinlog**:通过指定开始和结束时间,将这段时间内执行的 SQL 语句导出到一个文本文件。例如: ``` mysqlbinlog --start-date='2013-02-04 10:00:00' --stop-date='2013-02-04 12:08:45' /app/mysql...

    03-MySQL数据库源码

    MySQL通过SQL解析器将用户输入的SQL语句转化为执行计划。解析器将SQL转换为抽象语法树(AST),然后由查询优化器根据数据分布、统计信息等选择最佳执行路径。源码中涉及的模块如`sql_yacc.cc`和`sql_optimizer.cc`...

    全库备份各种恢复1

    将备份文件`/data/dump.sql` 输入到MySQL客户端,它会读取文件中的SQL语句并执行恢复操作。 对于单表恢复,我们需要手动处理备份文件。例如,如果我们要恢复名为“test”的表,可以按照以下步骤操作: 1. 首先,找...

Global site tag (gtag.js) - Google Analytics