MySQL BinLog语句检索

时间:2010-06-13 14:04:07

标签: mysql mysqlbinlog

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

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

INSERT INTO table SET field1='a';
INSERT INTO table SET field1='tommy';
INSERT INTO table SET field1='2';

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

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我从来没有得到答案,但我会告诉你我做了什么。 1.将mysqlbinlog转到文本文件 2.创建了一个PHP脚本,该脚本使用fgets读取日志的每一行 3.循环遍历每一行时,脚本使用stristr函数解析它 4.如果该行与我要查找的字符串匹配,则将该行记录到文件

运行mysqlbinlog和PHP脚本需要一段时间,但它不再超时。我最初在PHP中使用fread,但是将整个文件读入内存并导致脚本在大型(1G)日志文件上崩溃。现在,它需要几分钟才能运行(我还将max_execution_time变量设置得更大),但它的工作方式就像魅力一样。 fgets一次获得一行,因此它几乎不占用内存。