MySQL BinLog语句检索

标签 mysql mysqlbinlog

我有七个 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 运行到一个文本文件,然后根据字符串解析结果来实现这一点,但文本文件太大了。它只会使我运行的任何脚本超时,甚至使其无法在文本编辑器中打开。

感谢您提前提供的帮助。

最佳答案

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

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

关于MySQL BinLog语句检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3032486/

相关文章:

mysql - 添加具有默认值的非空列时,是否在 MySQL 中记录行级 binlog 条目

MySql 二进制日志记录 - 自动增量问题

mysql - 如何使用 Windows 服务自动从主数据库重新同步从数据库?

mysql - 如何在mysql中选择所有重复记录

python - SQLAlchemy:查询期间失去与 MySQL 服务器的连接

php - 可执行文件有更多数据要发送,但不知道如何向可执行文件发送信号,表明已发送的数据已处理并准备好下一个 block

mysql - 在node js forEach中插入多个文本单个textarea

MySQL恢复,包括binlog位置MASTER_LOG_POS

php - mysql总计和多行的差异

mysql - 在 MySQL Bin Log 中搜索查询