首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL BinLog语句检索

MySQL BinLog语句检索
EN

Stack Overflow用户
提问于 2010-06-13 22:04:07
回答 1查看 1.1K关注 0票数 0

我有七个1G MySQL binlog文件,我必须使用它们来检索一些“丢失”的信息。我只需要从日志中获取某些INSERT语句(例如,其中该语句以"INSERT INTO table SET field1=“开头)。如果我只是运行mysqlbinlog (即使是针对每个数据库并使用--short-form),我会得到一个几百兆字节的文本文件,这使得使用任何其他程序进行解析几乎是不可能的。

有没有办法只从日志中检索特定的sql语句?我不需要任何辅助信息(时间戳、自动增量等)。我只需要一个与某个字符串匹配的sql语句列表。理想情况下,我希望有一个仅列出这些sql语句的文本文件,例如:

代码语言:javascript
复制
INSERT INTO table SET field1='a';
INSERT INTO table SET field1='tommy';
INSERT INTO table SET field1='2';

我可以通过对文本文件运行mysqlbinlog,然后根据字符串解析结果来实现,但是文本文件太大了。我运行的任何脚本都会超时,甚至无法在文本编辑器中打开。

提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-16 10:15:29

我从来没有收到过答复,但我会告诉你我是做了什么来度过难关的。1.将mysqlbinlog运行到文本文件中2.创建了一个PHP脚本,该脚本使用fgets读取日志的每一行3.在遍历每一行时,该脚本使用stristr函数对其进行解析4.如果该行与我要查找的字符串匹配,则会将该行记录到文件中

运行mysqlbinlog和PHP脚本需要一段时间,但不会再超时。我最初在PHP中使用fread,但它会将整个文件读入内存,并导致脚本在处理大型(1G)日志文件时崩溃。现在,它需要几分钟才能运行(我还将max_execution_time变量设置得更大),但它的效果很好。fgets一次获取一行,所以它几乎不会占用那么多内存。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3032486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档