在95数据库服务器查找posts.post_thread的postid=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
# /root/parsesql.sh
1652971.sql这个里面的内容就是我们最后的成果
相关推荐
例如,`binlog2sql --host=localhost --user=root --password=password --start-position=start_pos --stop-position=end_pos > output.sql`,这将把指定范围内的binlog事件转换为SQL语句并输出到output.sql文件。...
1. **查找binlog日志文件**: 使用`mysqlbinlog`工具查看包含删除操作的日志文件,例如: ```bash mysqlbinlog /var/lib/mysql/mysql-bin.000001 ``` 2. **定位删除操作**: 查看输出,找到执行删除操作的...
5. **导出和备份**:将binlog事件转换为可读性强的格式(如SQL语句),便于进一步分析或备份。 在实际操作中,如果你遇到数据库故障或需要从binlog恢复数据,这些工具能大大提高效率。例如,当数据库因意外丢失或...
6. **性能分析**:通过分析二进制日志,可以评估数据库的性能瓶颈,比如找出耗时较长的SQL语句,为优化数据库性能提供依据。 7. **可视化界面**:4.4版本可能提供了更完善的图形用户界面,使操作更加直观,降低使用...
STATEMENT 基于 SQL 语句的日志记录,记录的是 SQL 语句,对数据进行修改的 SQL 都会记录在日志文件中。ROW 基于行的日志记录,记录的是每一行的数据变更。(默认)MIXED 混合了 STATEMENT 和 ROW 两种格式,默认...
1. **查看事件内容**:通过指定日志文件名和起始位置,可以输出二进制日志中的SQL语句或者其他事件。 2. **转储日志**:将二进制日志转换为可读的SQL语句,便于理解或执行。 3. **比较日志**:对比不同时间点的日志...
在使用Baretail Pro进行MySQL binlog分析时,首先需要确保binlog日志已经启用并且正确配置。然后,可以将binlog文件导入到Baretail Pro中,利用其实时更新和搜索功能来监控SQL操作。如果需要,还可以设置警报,以便...
4. **恢复流程**:先恢复全量数据,再按照时间顺序逐步恢复增量数据,期间需要仔细检查并移除任何可能引起问题的SQL语句。 通过遵循上述步骤,即使在遇到误删除等紧急情况时,也能最大程度地减少数据丢失的风险,并...
例如,你可以通过`--start-datetime`选项指定从某个时间点开始读取日志,或者通过`--stop-datetime`选项设置停止时间点。此外,还可以使用`--start-position`和`--stop-position`选项根据日志文件中的事件位置进行...
- 使用MySQL的binlog工具来获取误删语句的细节,并构造出反转的SQL语句。例如,可以通过以下命令构造插入语句:`mysqlbinlog -vv binlog_file`。 - 根据输出结果,手动构造反转的SQL语句,如:`INSERT INTO user ...
数据恢复是通过重新执行备份文件中的SQL语句来实现的。例如,如果误删了数据库中的表,可以将之前备份的SQL文件导入到数据库中,执行恢复操作。对于不同环境和需求,MySQL提供多种恢复策略,如全量备份、增量备份和...
这种格式的好处在于它不依赖于特定的SQL语句,而是记录了实际的数据变化,因此在某些情况下,如表结构改变或无法还原SQL语句时,ROW格式更有优势。 在“Undelete-Mysql.zip”压缩包中,包含的项目“MyUndelete-...
mysqlbinlog是一个用来处理二进制日志文件的实用工具,它能够读取并执行二进制日志文件中的SQL语句,从而实现数据的恢复。你可以在命令行中使用如下命令来指定恢复时间: mysqlbinlog --start-date="2005-04-20 9:...
binlog记录所有改变数据库状态的SQL语句,以供从库同步使用。在两阶段提交中,binlog写入磁盘并确认后,事务才真正提交。 在高并发环境中,这种日志机制优化了更新操作,降低了磁盘I/O和查找成本。通过redo log的...
【实验 1-7】查看日志内容:通过命令行,如 tail -f binlog.000001 查看二进制日志,mysqladmin -u root -p slowlog flush 用于清空慢查询日志,然后使用 tail -f slow.log 查看慢查询记录。general.log 文件通常...
- 通过slow log等日志文件查找正在执行的SQL语句。 3. **操作系统层面** - **内存状态** - /proc/meminfo: 显示内存使用情况。 - SWAP: 检查是否存在大量页交换。 - **CPU使用率** - Load: 监控系统负载情况...
3. 要确定恢复的起点和终点,通过`mysqlbinlog`命令查看binlog文件,找到与`testlzj`相关的创建和删除数据库的语句。创建数据库的开始位置为5759,结束位置为1115426。 4. 使用`mysqlbinlog`命令,指定开始和结束...
2. **使用 mysqlbinlog**:通过指定开始和结束时间,将这段时间内执行的 SQL 语句导出到一个文本文件。例如: ``` mysqlbinlog --start-date='2013-02-04 10:00:00' --stop-date='2013-02-04 12:08:45' /app/mysql...
MySQL通过SQL解析器将用户输入的SQL语句转化为执行计划。解析器将SQL转换为抽象语法树(AST),然后由查询优化器根据数据分布、统计信息等选择最佳执行路径。源码中涉及的模块如`sql_yacc.cc`和`sql_optimizer.cc`...
将备份文件`/data/dump.sql` 输入到MySQL客户端,它会读取文件中的SQL语句并执行恢复操作。 对于单表恢复,我们需要手动处理备份文件。例如,如果我们要恢复名为“test”的表,可以按照以下步骤操作: 1. 首先,找...