1

shyikoコネクタを使用して、bin ログの変更を mysql クラスターからダウンストリーム データベース システムにストリーミングしています。

クラスタ = MySQL マスター + プライマリ スレーブ + セカンダリ スレーブ

リッスンしている MySQL システムが何らかの理由でダウンした場合、メカニズムはスレーブをマスターとして昇格させ、通常どおり続行することです。しかし、問題は、bin ログ ファイルと位置が、障害が発生したマシンと新しく昇格したスレーブ mysql とで完全に異なることです。

両方のマシンのコミット ログ間で考えられる唯一の共通点は、タイムスタンプです。mysqlbinlog ユーティリティにも、--start-datetimeオプションを使用してタイムスタンプを設定する機能があります。

特定のタイムスタンプを使用して mysql bin ログの位置を見つける方法はありますか? 上記のライブラリは特定の位置のみを使用でき、タイムスタンプは使用できないためです。そうでない場合、それを達成するためにどのように進むべきですか。

4

1 に答える 1

3

最善のアプローチは GTID ( mysql-binlog-connector-java がサポートしている、btw ) を使用することですが、Michael が 5.6+ が必要だと言ったように。アップグレードする方法がまったくなく、関連するリスクを理解している場合は、独自の--start-datetimeを取得するのは次のように簡単です。

BinaryLogClient binaryLogClient = new BinaryLogClient(...);
binaryLogClient.setBinlogFilename(""); // instructs server to stream events 
// starting from the oldest known binlog
final long start = ...
binaryLogClient.registerEventListener(new BinaryLogClient.EventListener() {
    @Override
    public void onEvent(Event event) {
        if (event.getHeader().getTimestamp() < start) {
            return;
        }
        // process the event here
    }
});
binaryLogClient.connect();

注: binlog イベントのタイムスタンプにはの精度があります。

于 2016-09-11T08:04:52.783 に答える