我有七个1G MySQL binlog文件,我必须使用它们来检索一些“丢失”的信息。我只需要从日志中获取某些INSERT语句(例如,其中该语句以"INSERT INTO table SET field1=“开头)。如果我只是运行mysqlbinlog (即使是针对每个数据库并使用--short-form),我会得到一个几百兆字节的文本文件,这使得使用任何其他程序进行解析几乎是不可能的。
有没有办法只从日志中检索特定的sql语句?我不需要任何辅助信息(时间戳、自动增量等)。我只需要一个与某个字符串匹配的sql语句列表。理想情况下,我希望有一个仅列出这些sql语句的文本文件,例如:
INSERT INTO table SET field1='a';
INSERT INTO table SET field1='tommy';
INSERT INTO table SET field1='2';我可以通过对文本文件运行mysqlbinlog,然后根据字符串解析结果来实现,但是文本文件太大了。我运行的任何脚本都会超时,甚至无法在文本编辑器中打开。
提前感谢您的帮助。
发布于 2010-06-16 10:15:29
我从来没有收到过答复,但我会告诉你我是做了什么来度过难关的。1.将mysqlbinlog运行到文本文件中2.创建了一个PHP脚本,该脚本使用fgets读取日志的每一行3.在遍历每一行时,该脚本使用stristr函数对其进行解析4.如果该行与我要查找的字符串匹配,则会将该行记录到文件中
运行mysqlbinlog和PHP脚本需要一段时间,但不会再超时。我最初在PHP中使用fread,但它会将整个文件读入内存,并导致脚本在处理大型(1G)日志文件时崩溃。现在,它需要几分钟才能运行(我还将max_execution_time变量设置得更大),但它的效果很好。fgets一次获取一行,所以它几乎不会占用那么多内存。
https://stackoverflow.com/questions/3032486
复制相似问题