mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-22 23:52:03 +00:00
Merge pull request #14696 from BohuTANG/mysql_replication_tablemapevent
Fix mysql replication optional metadata ignore
This commit is contained in:
commit
92eb58b555
@ -50,21 +50,22 @@ uint64_t readLengthEncodedNumber(ReadBuffer & buffer)
|
|||||||
uint64_t buf = 0;
|
uint64_t buf = 0;
|
||||||
buffer.readStrict(c);
|
buffer.readStrict(c);
|
||||||
auto cc = static_cast<uint8_t>(c);
|
auto cc = static_cast<uint8_t>(c);
|
||||||
if (cc < 0xfc)
|
switch (cc)
|
||||||
{
|
{
|
||||||
return cc;
|
/// NULL
|
||||||
}
|
case 0xfb:
|
||||||
else if (cc < 0xfd)
|
break;
|
||||||
{
|
case 0xfc:
|
||||||
buffer.readStrict(reinterpret_cast<char *>(&buf), 2);
|
buffer.readStrict(reinterpret_cast<char *>(&buf), 2);
|
||||||
}
|
break;
|
||||||
else if (cc < 0xfe)
|
case 0xfd:
|
||||||
{
|
buffer.readStrict(reinterpret_cast<char *>(&buf), 3);
|
||||||
buffer.readStrict(reinterpret_cast<char *>(&buf), 3);
|
break;
|
||||||
}
|
case 0xfe:
|
||||||
else
|
buffer.readStrict(reinterpret_cast<char *>(&buf), 8);
|
||||||
{
|
break;
|
||||||
buffer.readStrict(reinterpret_cast<char *>(&buf), 8);
|
default:
|
||||||
|
return cc;
|
||||||
}
|
}
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
@ -171,7 +171,7 @@ namespace MySQLReplication
|
|||||||
|
|
||||||
/// Ignore MySQL 8.0 optional metadata fields.
|
/// Ignore MySQL 8.0 optional metadata fields.
|
||||||
/// https://mysqlhighavailability.com/more-metadata-is-written-into-binary-log/
|
/// https://mysqlhighavailability.com/more-metadata-is-written-into-binary-log/
|
||||||
payload.ignore(payload.available() - CHECKSUM_CRC32_SIGNATURE_LENGTH);
|
payload.ignoreAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Types that do not used in the binlog event:
|
/// Types that do not used in the binlog event:
|
||||||
@ -221,6 +221,7 @@ namespace MySQLReplication
|
|||||||
}
|
}
|
||||||
case MYSQL_TYPE_NEWDECIMAL:
|
case MYSQL_TYPE_NEWDECIMAL:
|
||||||
case MYSQL_TYPE_STRING: {
|
case MYSQL_TYPE_STRING: {
|
||||||
|
/// Big-Endian
|
||||||
auto b0 = UInt16(meta[pos] << 8);
|
auto b0 = UInt16(meta[pos] << 8);
|
||||||
auto b1 = UInt8(meta[pos + 1]);
|
auto b1 = UInt8(meta[pos + 1]);
|
||||||
column_meta.emplace_back(UInt16(b0 + b1));
|
column_meta.emplace_back(UInt16(b0 + b1));
|
||||||
@ -231,6 +232,7 @@ namespace MySQLReplication
|
|||||||
case MYSQL_TYPE_BIT:
|
case MYSQL_TYPE_BIT:
|
||||||
case MYSQL_TYPE_VARCHAR:
|
case MYSQL_TYPE_VARCHAR:
|
||||||
case MYSQL_TYPE_VAR_STRING: {
|
case MYSQL_TYPE_VAR_STRING: {
|
||||||
|
/// Little-Endian
|
||||||
auto b0 = UInt8(meta[pos]);
|
auto b0 = UInt8(meta[pos]);
|
||||||
auto b1 = UInt16(meta[pos + 1] << 8);
|
auto b1 = UInt16(meta[pos + 1] << 8);
|
||||||
column_meta.emplace_back(UInt16(b0 + b1));
|
column_meta.emplace_back(UInt16(b0 + b1));
|
||||||
@ -911,7 +913,7 @@ namespace MySQLReplication
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
payload.tryIgnore(CHECKSUM_CRC32_SIGNATURE_LENGTH);
|
payload.ignoreAll();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -283,6 +283,7 @@ int main(int argc, char ** argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
/// mysql_protocol --host=172.17.0.3 --user=root --password=123 --db=sbtest
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
boost::program_options::options_description desc("Allowed options");
|
boost::program_options::options_description desc("Allowed options");
|
||||||
|
@ -195,6 +195,7 @@ void MaterializeMySQLSyncThread::synchronization(const String & mysql_version)
|
|||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
|
client.disconnect();
|
||||||
tryLogCurrentException(log);
|
tryLogCurrentException(log);
|
||||||
getDatabase(database_name).setException(std::current_exception());
|
getDatabase(database_name).setException(std::current_exception());
|
||||||
}
|
}
|
||||||
@ -206,6 +207,7 @@ void MaterializeMySQLSyncThread::stopSynchronization()
|
|||||||
{
|
{
|
||||||
sync_quit = true;
|
sync_quit = true;
|
||||||
background_thread_pool->join();
|
background_thread_pool->join();
|
||||||
|
client.disconnect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user