1
0
Эх сурвалжийг харах

fixed mysql 8.0.30+ , support new variable

jianghang.loujh 3 сар өмнө
parent
commit
f350fbdc0a

+ 3 - 0
dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/QueryLogEvent.java

@@ -740,9 +740,11 @@ public class QueryLogEvent extends LogEvent {
                     case Q_DEFAULT_TABLE_ENCRYPTION:
                         // *start++ = thd->variables.default_table_encryption;
                         buffer.forward(1);
+                        break;
                     case Q_DDL_SKIP_REWRITE:
                         // *start++ = thd->variables.binlog_ddl_skip_rewrite;
                         buffer.forward(1);
+                        break;
                     case Q_HRNOW:
                         // https://github.com/alibaba/canal/issues/4940
                         // percona 和 mariadb各自扩展mysql binlog的格式后有冲突
@@ -779,6 +781,7 @@ public class QueryLogEvent extends LogEvent {
                         int count = buffer.getUint8();
                         // character_set_collations= Lex_cstring((const char *) pos0 , (const char *) pos);
                         buffer.forward(count * 4);
+                        break;
                     default:
                         /*
                          * That's why you must write status vars in growing

+ 11 - 13
driver/src/main/java/com/alibaba/otter/canal/parse/driver/mysql/packets/client/ClientAuthenticationSHA2Packet.java

@@ -3,32 +3,30 @@ package com.alibaba.otter.canal.parse.driver.mysql.packets.client;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 
+import org.apache.commons.lang.StringUtils;
+
 import com.alibaba.otter.canal.parse.driver.mysql.packets.Capability;
 import com.alibaba.otter.canal.parse.driver.mysql.utils.ByteHelper;
 import com.alibaba.otter.canal.parse.driver.mysql.utils.MSC;
 import com.alibaba.otter.canal.parse.driver.mysql.utils.MySQLPasswordEncrypter;
 
-import org.apache.commons.lang.StringUtils;
-
 public class ClientAuthenticationSHA2Packet extends ClientAuthenticationPacket {
 
+    private int clientCapability = Capability.CLIENT_LONG_PASSWORD | Capability.CLIENT_LONG_FLAG
+                                   | Capability.CLIENT_PROTOCOL_41 | Capability.CLIENT_INTERACTIVE
+                                   | Capability.CLIENT_TRANSACTIONS | Capability.CLIENT_SECURE_CONNECTION
+                                   | Capability.CLIENT_MULTI_STATEMENTS | Capability.CLIENT_PLUGIN_AUTH
+                                   | Capability.CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA;
+
     @Override
     public byte[] toBytes() throws IOException {
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         // 1. write client_flags
-        int clientCapability = 0;
-        clientCapability |= Capability.CLIENT_LONG_PASSWORD;
-        clientCapability |= Capability.CLIENT_LONG_FLAG;
-        clientCapability |= Capability.CLIENT_PROTOCOL_41;
-        clientCapability |= Capability.CLIENT_TRANSACTIONS;
-        clientCapability |= Capability.CLIENT_SECURE_CONNECTION;
-        clientCapability |= Capability.CLIENT_MULTI_STATEMENTS;
-        clientCapability |= Capability.CLIENT_PLUGIN_AUTH;
-        clientCapability |= Capability.CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA;
+        int capability = clientCapability;
         if (getDatabaseName() != null) {
-            clientCapability |= Capability.CLIENT_CONNECT_WITH_DB;
+            capability |= Capability.CLIENT_CONNECT_WITH_DB;
         }
-        ByteHelper.writeUnsignedIntLittleEndian(clientCapability, out);
+        ByteHelper.writeUnsignedIntLittleEndian(capability, out);
 
         // 2. write max_packet_size
         ByteHelper.writeUnsignedIntLittleEndian(MSC.MAX_PACKET_LENGTH, out);