スナップショットとmysqlのトランザクションログを使用して、特定のデータベースで特定の時点を実行しようとしています。スナップショットの時点からリカバリの時点までステートメントをプルするために、以下を使用しています。
mysqlbinlog --database=**database** --start-datetime="$start_datetime" --stop-datetime="$stop_datetime" list_of_binlog_file_names
Mysqlbinlogが生成する結果のステートメントには、次の形式の別のデータベースのINSERT/UPDATE/DELETEステートメントが含まれます。
INSERT INTO **database**_reporting.tablename VALUES (data);
したがって、機能的には、2つの異なるデータベースからステートメントを取得しています。1つは本番データベースで、もう1つはレポートデータベースであり、「_ reporting」によって命名法で区別されています。アプリケーションがプライマリデータベースを使用しながらセカンダリデータベースに挿入しているように見え、binlogは両方のステートメントをプライマリデータベースに関連付けます。
MysqlbinlogがUSE primary_database;
の後に実行される限り、両方のデータベースのステートメントを読み取るのは正しいですか? mysqlbinlogを使用してレポートデータベース用のものを分離する方法はありますか?私はかなり検索しました-私はここで間違った木を吠えているかもしれません。質問を明確にできるかどうか教えてください。
-database オプションは、データベースにテーブルを明示的に指定するクエリを除外しないため、それをgrepにリダイレクトして、primary_database
とINSERT、UPDATE、DELETEを見つける必要があります。
mysqlbinlog --database=**database** --start-datetime="$start_datetime" --stop-datetime="$stop_datetime" list_of_binlog_file_names | grep "primary_database\." | grep "[IUD][NPE][SDL][EA][RT][TE]"
これは完璧な解決策ではないかもしれません。おそらく良いPerlまたはpythonスクリプトで、これを釘付けにします。