From 2a0e79c145bb1d8da9256928aa1ef9aa3a4ba7c2 Mon Sep 17 00:00:00 2001 From: BohuTANG Date: Sat, 23 May 2020 18:42:21 +0800 Subject: [PATCH] Fix MySQL 8.0 optional metadata fields read in TableMapEvent --- src/Core/MySQLReplication.cpp | 8 ++++++-- src/Core/MySQLReplication.h | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Core/MySQLReplication.cpp b/src/Core/MySQLReplication.cpp index 0c74f9a4f34..bdaf96b4ddd 100644 --- a/src/Core/MySQLReplication.cpp +++ b/src/Core/MySQLReplication.cpp @@ -161,8 +161,12 @@ namespace MySQLReplication readLengthEncodedString(meta, payload); parseMeta(meta); - size_t len = (column_count + 8) / 7; - payload.readStrict(reinterpret_cast(null_bitmap.data()), len); + size_t null_bitmap_size = (column_count + 8) / 7; + readBitmap(payload, null_bitmap, null_bitmap_size); + + /// Ignore MySQL 8.0 optional metadata fields. + /// https://mysqlhighavailability.com/more-metadata-is-written-into-binary-log/ + payload.ignore(payload.available() - CHECKSUM_CRC32_SIGNATURE_LENGTH); } void TableMapEvent::parseMeta(String meta) diff --git a/src/Core/MySQLReplication.h b/src/Core/MySQLReplication.h index 4537afb51a3..420bd8fdc02 100644 --- a/src/Core/MySQLReplication.h +++ b/src/Core/MySQLReplication.h @@ -384,7 +384,7 @@ namespace MySQLReplication UInt32 column_count; std::vector column_type; std::vector column_meta; - String null_bitmap; + Bitmap null_bitmap; void dump() const override;