2016-07-06 12 views
0

私はバイナリログを持っていますので、現在ログインしているすべてのユーザに対して1秒ごとにテーブルを更新するコードが不適切であるためにリストアすることができます。プロセスはこれらの行のすべてを復元し、スクリプトを必要以上に長くする。MySQLバイナリログから特定のクエリを削除する方法

すべてのバイナリログからこの特定のクエリを削除するために、このファイルを更新する最も簡単な方法は何ですか?私はテストしたこのPHPスクリプトを持っていますが、小さなファイルで動作しましたが、ファイルサイズになるとpreg_replaceにはいくつかの制限があるようです(あるいはPHP全体として)。正規表現は、そこに小さなファイルで素晴らしい仕事ができるように見えた

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

が、それは私が(PHPは、私の主な言語である)他の言語と同様によくないよということだけだ。

は、ここに私のPHPのラインです私は何を使うべきか、あるいはRegexを何か他のものに実装する方法を知っている。

+0

** grep **はより速くなります - _-v_フラグを使用して、識別したコンテンツのない行だけを残したいことを示します。 – user2182349

+0

あなたはそれで私を助けることができると思いますか?私はbashのnoobのようなものだと私は見つけることができる例でどこを開始するか分からない –

+0

テストデータの小さなビットを投稿できますか?おそらく、あなたが一致させたくない2つの行とそうするべき行? – user2182349

答えて

1

あなたは離れて、そのテーブル内のすべてのデータを投げるために喜んでいる場合は、

ALTER TABLE notifications ENGINE=BLACKHOLE; 

彼らは何もしないだろうので、その後のクエリがによってジップでしょう。

+0

これは信じられないほど、このようなものは存在するとは思えませんでした。私は間違いなく私はbinlogsから復元する必要があります次回のためにこれをメモします –

関連する問題