質問

私はいくつかの「失われた」情報を取得するために使用する必要があること7つの1G MySQLのバイナリログファイルを持っています。私は、ログ(例:「INSERT INTOテーブルSETフィールド1 =」との声明を開始する)から、特定のINSERT文を取得する必要があります。私は(も、データベースごとと--short-フォームを使用している場合)mysqlbinlogはを実行すると、私はその後、他のプログラムで解析することはほとんど不可能れ、数百メガバイトであるテキストファイルを取得します。

ちょうどログから特定のSQL文を取得する方法はありますか?私は補助的な情報(タイムスタンプ、自動インクリメント#S、など)のいずれかを必要としません。私は、特定の文字列に一致するSQL文のリストが必要です。

:理想的には、私はちょうどリストというようなこれらのSQL文を、テキストファイルを持っていると思います
INSERT INTO table SET field1='a';
INSERT INTO table SET field1='tommy';
INSERT INTO table SET field1='2';

私は、テキストファイルにmysqlbinlogはを実行し、その文字列に基づいて結果を解析しますが、テキストファイルであまりにも大きいことを得ることができます。また、私が実行しても、それは不可能テキストエディタで開くようにする任意のスクリプト実行ちょうど倍ます。

事前にご協力いただきありがとうございます。

役に立ちましたか?

解決

私は答えを受けたことはありませんが、私はで取得する何をしたかを教えてくれます。 1.蘭は、テキストファイルにmysqlbinlogは 2.用途のfgetsのは、ログの各行を読み取るようにすることをPHPスクリプトを作成しました 3.各ラインをループしながら、スクリプトがstristr機能を使用してそれを解析し 4.ラインは私が探しています文字列に一致した場合、それはファイル

にラインを記録します

これは、mysqlbinlogはとPHPスクリプトを実行するために時間がかかりますが、それはもはやタイムアウトします。私はもともとPHPでのfreadを使用し、それはファイル全体をメモリに読み込み、スクリプトが大(1G)でクラッシュログファイルをしていました。さて、それは(私も大きくなるようにmax_execution_timeに変数を設定)を実行するために数分かかりますが、それは魔法のように動作します。それは多くのメモリとほぼ占有しないようにfgetsのは、一度に1行を取得します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top