我有七个1G MySQL的二进制日志文件,我要用来检索一些“丢失”的信息。我只需要得到从日志某些INSERT语句(例如,在语句开始用“INSERT INTO表字段1 SET =”)。如果我只是运行mysqlbinlog可以(即使每个数据库,并使用--short形式),我得到一个文本文件,它是几百兆字节,这使得它几乎不可能再与任何其他程序解析。

有没有办法,只是检索日志某些SQL语句?我不需要任何的辅助信息(时间戳,自动增量#秒,等等)。我只需要符合特定字符串的SQL语句的列表。理想情况下,我想有一个文本文件,只是列出了这些SQL语句,如:

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

我能得到通过运行mysqlbinlog可以到一个文本文件,然后解析基于字符串的结果,但文本文件是太大了。它只是超时我运行,甚至使其无法在文本编辑器打开任何脚本。

感谢您的帮助提前。

有帮助吗?

解决方案

我从来没有收到一个答案,但我会告诉你我做了什么的就搞定了。 1.冉mysqlbinlog可以以一个文本 2.创建一个PHP脚本,使用与fgets读取日志的每一行 3.当循环通过每个线,使用stristr函数它脚本解析 4.如果线我寻找匹配字符串,它记录行到文件

这需要一段时间来运行mysqlbinlog可以和PHP脚本,但它不再超时。我最初使用PHP中的fread,而是将整个文件读取到内存中,并导致脚本崩溃的大(1G)日志文件。现在,它需要几分钟的时间来运行(我还设置了可变max_execution_time仅仅要大),但它的工作原理就像一个魅力。与fgets得到在一次一行,因此它不占用几乎一样多的存储器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top