如何从 MySQL 二进制日志中删除特定查询

How To Remove Specific Query From MySQL Binary Log

所以我有一个二进制日志,由于一些写得不好的代码,每秒钟左右更新一个 table 当前登录的每个用户。当然,恢复过程正在恢复这些行中的每一行都使脚本花费的时间比需要的时间长。

更新此文件以从我的所有二进制日志中删除该特定查询的最快方法是什么?我有这个我测试过的 PHP 脚本,它在一个较小的文件上工作,但是 preg_replace 似乎有一些限制(或者可能只是 PHP 作为一个整体)当涉及到文件时尺寸。

这是我的 PHP 行:

file_put_contents("/logs/restore.sql",preg_replace("/use(?:.|\n)+?update `notifi(?:.|\n)+?COMMIT\/\*\!\*\/;/mui",'',file_get_contents("/logs/restorex.sql")));

那里的 Regex 似乎对较小的文件工作得很好,只是我对任何其他语言都不太好(PHP 是我的主要语言)知道我应该使用什么,或者如何将该正则表达式实现到其他东西中。

如果你愿意扔掉那个table中的所有数据,

 ALTER TABLE notifications ENGINE=BLACKHOLE;

然后查询就会快速过去,因为它们什么都不做。