From a7be9c75f97bca9227d19f48e7fa721811b23a54 Mon Sep 17 00:00:00 2001 From: agapple Date: Tue, 20 Nov 2018 18:29:01 +0800 Subject: [PATCH] fixed mysql rotate checksum --- .../parse/inbound/mysql/MysqlConnection.java | 31 +++--------------- .../canal/parse/DirectLogFetcherTest.java | 32 ++++--------------- .../parse/inbound/mysql/MysqlDumpTest.java | 4 +-- 3 files changed, 14 insertions(+), 53 deletions(-) diff --git a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlConnection.java b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlConnection.java index c12ca1a3..0ec5e7aa 100644 --- a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlConnection.java +++ b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlConnection.java @@ -503,40 +503,19 @@ public class MysqlConnection implements ErosaConnection { * */ private void loadBinlogChecksum() { - if (checkMariaDB()) { - ResultSetPacket rs = null; - try { - rs = query("select @@global.binlog_checksum"); - } catch (IOException e) { - throw new CanalParseException(e); - } - - List columnValues = rs.getFieldValues(); - if (columnValues != null && columnValues.size() >= 1 && columnValues.get(0).toUpperCase().equals("CRC32")) { - binlogChecksum = LogEvent.BINLOG_CHECKSUM_ALG_CRC32; - } else { - binlogChecksum = LogEvent.BINLOG_CHECKSUM_ALG_OFF; - } - } - } - - /** - * 获取是否为mariadb - */ - private boolean checkMariaDB() { ResultSetPacket rs = null; try { - rs = query("SELECT @@version"); + rs = query("select @@global.binlog_checksum"); } catch (IOException e) { throw new CanalParseException(e); } List columnValues = rs.getFieldValues(); - if (columnValues != null && columnValues.size() >= 1) { - return StringUtils.containsIgnoreCase(columnValues.get(0), "MariaDB"); + if (columnValues != null && columnValues.size() >= 1 && columnValues.get(0).toUpperCase().equals("CRC32")) { + binlogChecksum = LogEvent.BINLOG_CHECKSUM_ALG_CRC32; + } else { + binlogChecksum = LogEvent.BINLOG_CHECKSUM_ALG_OFF; } - - return false; } private void accumulateReceivedBytes(long x) { diff --git a/parse/src/test/java/com/alibaba/otter/canal/parse/DirectLogFetcherTest.java b/parse/src/test/java/com/alibaba/otter/canal/parse/DirectLogFetcherTest.java index fd01e6a8..719e86dd 100644 --- a/parse/src/test/java/com/alibaba/otter/canal/parse/DirectLogFetcherTest.java +++ b/parse/src/test/java/com/alibaba/otter/canal/parse/DirectLogFetcherTest.java @@ -44,10 +44,9 @@ import com.taobao.tddl.dbsync.binlog.event.mariadb.AnnotateRowsEvent; public class DirectLogFetcherTest { - protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); protected String binlogFileName = "mysql-bin.000001"; protected Charset charset = Charset.forName("utf-8"); - private boolean isMariaDB; private int binlogChecksum; @Test @@ -193,7 +192,7 @@ public class DirectLogFetcherTest { // 如果不设置会出现错误: Slave can not handle replication events with the // checksum that master is configured to log // 但也不能乱设置,需要和mysql server的checksum配置一致,不然RotateLogEvent会出现乱码 - update("set @master_binlog_checksum= '@@global.binlog_checksum'", connector); + update("set @master_binlog_checksum= @@global.binlog_checksum", connector); } catch (Exception e) { logger.warn("update master_binlog_checksum failed", e); } @@ -217,35 +216,18 @@ public class DirectLogFetcherTest { } private void loadBinlogChecksum(MysqlConnector connector) { - checkMariaDB(connector); - if (isMariaDB) { - ResultSetPacket rs = null; - try { - rs = query("select @@global.binlog_checksum", connector); - } catch (IOException e) { - throw new CanalParseException(e); - } - - List columnValues = rs.getFieldValues(); - if (columnValues != null && columnValues.size() >= 1 && columnValues.get(0).toUpperCase().equals("CRC32")) { - binlogChecksum = LogEvent.BINLOG_CHECKSUM_ALG_CRC32; - } else { - binlogChecksum = LogEvent.BINLOG_CHECKSUM_ALG_OFF; - } - } - } - - private void checkMariaDB(MysqlConnector connector) { ResultSetPacket rs = null; try { - rs = query("SELECT @@version", connector); + rs = query("select @@global.binlog_checksum", connector); } catch (IOException e) { throw new CanalParseException(e); } List columnValues = rs.getFieldValues(); - if (columnValues != null && columnValues.size() >= 1) { - isMariaDB = StringUtils.containsIgnoreCase(columnValues.get(0), "MariaDB"); + if (columnValues != null && columnValues.size() >= 1 && columnValues.get(0).toUpperCase().equals("CRC32")) { + binlogChecksum = LogEvent.BINLOG_CHECKSUM_ALG_CRC32; + } else { + binlogChecksum = LogEvent.BINLOG_CHECKSUM_ALG_OFF; } } diff --git a/parse/src/test/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlDumpTest.java b/parse/src/test/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlDumpTest.java index 6c11c637..8c749891 100644 --- a/parse/src/test/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlDumpTest.java +++ b/parse/src/test/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlDumpTest.java @@ -29,12 +29,12 @@ public class MysqlDumpTest { @Test public void testSimple() { final MysqlEventParser controller = new MysqlEventParser(); - final EntryPosition startPosition = new EntryPosition("mysql-bin.000012", 34051L, 100L); + final EntryPosition startPosition = new EntryPosition("mysql-bin.000001", 4L); // startPosition.setGtid("f1ceb61a-a5d5-11e7-bdee-107c3dbcf8a7:1-17"); controller.setConnectionCharset(Charset.forName("UTF-8")); controller.setSlaveId(3344L); controller.setDetectingEnable(false); - controller.setMasterInfo(new AuthenticationInfo(new InetSocketAddress("127.0.0.1", 3306), "canal", "canal")); + controller.setMasterInfo(new AuthenticationInfo(new InetSocketAddress("127.0.0.1", 3306), "root", "hello")); controller.setMasterPosition(startPosition); controller.setEnableTsdb(true); controller.setDestination("example");