mirror of
https://github.com/alibaba/canal.git
synced 2026-11-04 00:30:15 +08:00
fixed rds binlog dump
This commit is contained in:
@@ -353,7 +353,11 @@ public abstract class AbstractEventParser<EVENT> extends AbstractCanalLifeCycle
|
|||||||
eventSink.interrupt();
|
eventSink.interrupt();
|
||||||
|
|
||||||
if (multiStageCoprocessor != null && multiStageCoprocessor.isStart()) {
|
if (multiStageCoprocessor != null && multiStageCoprocessor.isStart()) {
|
||||||
multiStageCoprocessor.stop();
|
try {
|
||||||
|
multiStageCoprocessor.stop();
|
||||||
|
} catch (Throwable t) {
|
||||||
|
logger.debug("multi processor rejected:", t);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -752,14 +752,13 @@ public class MysqlEventParser extends AbstractMysqlEventParser implements CanalE
|
|||||||
logPosition.setPostion(entryPosition);
|
logPosition.setPostion(entryPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entry == null) {
|
// 直接用event的位点来处理,解决一个binlog文件里没有任何事件导致死循环无法退出的问题
|
||||||
return true;
|
String logfilename = event.getHeader().getLogFileName();
|
||||||
}
|
// 记录的是binlog end offest,
|
||||||
|
// 因为与其对比的offest是show master status里的end offest
|
||||||
String logfilename = entry.getHeader().getLogfileName();
|
Long logfileoffset = event.getHeader().getLogPos();
|
||||||
Long logfileoffset = entry.getHeader().getLogfileOffset();
|
Long logposTimestamp = event.getHeader().getWhen() * 1000;
|
||||||
Long logposTimestamp = entry.getHeader().getExecuteTime();
|
Long serverId = event.getHeader().getServerId();
|
||||||
Long serverId = entry.getHeader().getServerId();
|
|
||||||
|
|
||||||
// 如果最小的一条记录都不满足条件,可直接退出
|
// 如果最小的一条记录都不满足条件,可直接退出
|
||||||
if (logposTimestamp >= startTimestamp) {
|
if (logposTimestamp >= startTimestamp) {
|
||||||
@@ -771,6 +770,10 @@ public class MysqlEventParser extends AbstractMysqlEventParser implements CanalE
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (entry == null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// 记录一下上一个事务结束的位置,即下一个事务的position
|
// 记录一下上一个事务结束的位置,即下一个事务的position
|
||||||
// position = current +
|
// position = current +
|
||||||
// data.length,代表该事务的下一条offest,避免多余的事务重复
|
// data.length,代表该事务的下一条offest,避免多余的事务重复
|
||||||
|
|||||||
@@ -567,8 +567,7 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar
|
|||||||
}
|
}
|
||||||
|
|
||||||
private EntryPosition createPosition(LogHeader logHeader) {
|
private EntryPosition createPosition(LogHeader logHeader) {
|
||||||
return new EntryPosition(logHeader.getLogFileName(),
|
return new EntryPosition(logHeader.getLogFileName(), logHeader.getLogPos() - logHeader.getEventLen(), // startPos
|
||||||
logHeader.getLogPos(),
|
|
||||||
logHeader.getWhen() * 1000L,
|
logHeader.getWhen() * 1000L,
|
||||||
logHeader.getServerId()); // 记录到秒
|
logHeader.getServerId()); // 记录到秒
|
||||||
}
|
}
|
||||||
@@ -818,6 +817,7 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar
|
|||||||
Header.Builder headerBuilder = Header.newBuilder();
|
Header.Builder headerBuilder = Header.newBuilder();
|
||||||
headerBuilder.setVersion(version);
|
headerBuilder.setVersion(version);
|
||||||
headerBuilder.setLogfileName(logHeader.getLogFileName());
|
headerBuilder.setLogfileName(logHeader.getLogFileName());
|
||||||
|
// 记录的是该binlog的start offest
|
||||||
headerBuilder.setLogfileOffset(logHeader.getLogPos() - logHeader.getEventLen());
|
headerBuilder.setLogfileOffset(logHeader.getLogPos() - logHeader.getEventLen());
|
||||||
headerBuilder.setServerId(logHeader.getServerId());
|
headerBuilder.setServerId(logHeader.getServerId());
|
||||||
headerBuilder.setServerenCode(UTF_8);// 经过java输出后所有的编码为unicode
|
headerBuilder.setServerenCode(UTF_8);// 经过java输出后所有的编码为unicode
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ public class BinlogDownloadQueue {
|
|||||||
if (StringUtils.isNotEmpty(needCompareName) && StringUtils.endsWith(needCompareName, "tar")) {
|
if (StringUtils.isNotEmpty(needCompareName) && StringUtils.endsWith(needCompareName, "tar")) {
|
||||||
needCompareName = needCompareName.substring(0, needCompareName.indexOf("."));
|
needCompareName = needCompareName.substring(0, needCompareName.indexOf("."));
|
||||||
}
|
}
|
||||||
return fileName.equalsIgnoreCase(needCompareName) && binlogList.isEmpty();
|
return (needCompareName == null || fileName.equalsIgnoreCase(needCompareName)) && binlogList.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void prepare() throws InterruptedException {
|
public void prepare() throws InterruptedException {
|
||||||
@@ -166,7 +166,14 @@ public class BinlogDownloadQueue {
|
|||||||
this.currentSize = 0;
|
this.currentSize = 0;
|
||||||
binlogList.clear();
|
binlogList.clear();
|
||||||
downloadQueue.clear();
|
downloadQueue.clear();
|
||||||
downloadThread = null;
|
try {
|
||||||
|
downloadThread.interrupt();
|
||||||
|
downloadThread.join();// 等待其结束
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
// ignore
|
||||||
|
} finally {
|
||||||
|
downloadThread = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void download(BinlogFile binlogFile) throws Throwable {
|
private void download(BinlogFile binlogFile) throws Throwable {
|
||||||
|
|||||||
Reference in New Issue
Block a user