MySQL - 根据时间戳查找bin log位置

MySQL - Find bin log position based on timestamp

我正在使用 shyiko 连接器将 bin 日志更改从 mysql 集群流式传输到下游数据库系统。

一个集群=MySQLmaster+Primary slave+Secondary slave

当监听的MySQL系统由于某种原因宕机时,机制是将slave提升为master,然后照常继续。但问题是bin日志文件和位置完全不同从故障机器到新提升的slavemysql.

我能想到的两台机器的提交日志之间唯一的共同点是 timestamp.Even mysqlbinlog 实用程序具有使用 --start-datetime 选项设置时间戳的功能。

有没有办法使用给定的时间戳找出 mysql bin 日志中的位置?因为我上面提到的库只能使用特定位置而不能使用时间戳。如果没有那又该如何实现呢

最好的方法是使用 GTID(which mysql-binlog-connector-java supports, btw) but just like Michael said it requires 5.6+. If there is absolutely no way for you to upgrade and you understand the risks involved then getting you own --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();

NOTE: binlog event's timestamp has seconds precision.