我使用shyiko连接器将bin日志更改从mysql集群流式传输到下游数据库系统。
群集= MySQL主服务器+主服务器+辅助服务器
当监听的MySQL系统由于某种原因而关闭时,机制是将slave作为master升级,然后像往常一样继续。但问题是bin日志文件和位置与故障机器到新升级的slave mysql完全不同。
我能想到的两台机器的提交日志之间唯一常见的事情就是时间戳.Even mysqlbinlog实用程序具有使用--start-datetime选项设置时间戳的功能。
有没有办法使用给定的时间戳找出mysql bin日志中的位置?因为我上面提到的库只能使用特定的位置而不能使用时间戳。如果没有,那么应该如何实现它。
答案 0 :(得分:3)
最好的方法是使用GTID(which mysql-binlog-connector-java supports, btw),但就像迈克尔说它要求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事件的时间戳具有秒精度。