Ver código fonte

add module dbsyncer-connector-mysql

AE86 1 ano atrás
pai
commit
5f8f3fe4a5
26 arquivos alterados com 262 adições e 117 exclusões
  1. 28 27
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/DqlOracleConfigValidator.java
  2. 2 1
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/DqlPostgreSQLConfigValidator.java
  3. 1 0
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/DqlSqlServerConfigValidator.java
  4. 0 16
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/MySQLConfigChecker.java
  5. 1 0
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/OracleConfigValidator.java
  6. 2 1
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/PostgreSQLConfigValidator.java
  7. 23 22
      dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/SqlServerConfigValidator.java
  8. 48 0
      dbsyncer-connector/dbsyncer-connector-mysql/pom.xml
  9. 21 5
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/DQLMySQLConnector.java
  10. 19 2
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/MySQLConnector.java
  11. 30 0
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/MySQLException.java
  12. 4 1
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/binlog/BinaryLogClient.java
  13. 6 3
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/binlog/BinaryLogRemoteClient.java
  14. 7 4
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/cdc/DqlMySQLListener.java
  15. 15 10
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/cdc/MySQLListener.java
  16. 3 0
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/deserializer/DatetimeV2Deserialize.java
  17. 3 0
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/deserializer/DeleteDeserializer.java
  18. 6 3
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/deserializer/JsonBinaryDeserialize.java
  19. 3 0
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/deserializer/UpdateDeserializer.java
  20. 3 0
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/deserializer/WriteDeserializer.java
  21. 3 4
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/validator/DqlMySQLConfigValidator.java
  22. 15 0
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/validator/MySQLConfigValidator.java
  23. 2 0
      dbsyncer-connector/dbsyncer-connector-mysql/src/main/resources/META-INF/services/org.dbsyncer.sdk.spi.ConnectorService
  24. 7 4
      dbsyncer-connector/dbsyncer-connector-mysql/src/test/java/BinaryLogRemoteClientTest.java
  25. 9 12
      dbsyncer-connector/pom.xml
  26. 1 2
      dbsyncer-sdk/src/main/java/org/dbsyncer/sdk/connector/AbstractDataBaseConfigValidator.java

+ 28 - 27
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/DqlOracleConfigChecker.java → dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/DqlOracleConfigValidator.java

@@ -1,28 +1,29 @@
-/**
- * DBSyncer Copyright 2020-2023 All Rights Reserved.
- */
-package org.dbsyncer.biz.checker.impl.connector;
-
-import org.dbsyncer.common.util.StringUtil;
-import org.dbsyncer.sdk.config.DatabaseConfig;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-/**
- * @Author AE86
- * @Version 1.0.0
- * @Date 2020-01-08 15:17
- */
-@Component
-public class DqlOracleConfigChecker extends AbstractDataBaseConfigValidator {
-
-    @Override
-    public void modify(DatabaseConfig connectorConfig, Map<String, String> params) {
-        super.modify(connectorConfig, params);
-        super.modifyDql(connectorConfig, params);
-
-        String schema = params.get("schema");
-        connectorConfig.setSchema(StringUtil.isBlank(schema) ? connectorConfig.getUsername().toUpperCase() : schema.toUpperCase());
-    }
+/**
+ * DBSyncer Copyright 2020-2023 All Rights Reserved.
+ */
+package org.dbsyncer.biz.checker.impl.connector;
+
+import org.dbsyncer.common.util.StringUtil;
+import org.dbsyncer.sdk.config.DatabaseConfig;
+import org.dbsyncer.sdk.connector.AbstractDataBaseConfigValidator;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @Author AE86
+ * @Version 1.0.0
+ * @Date 2020-01-08 15:17
+ */
+@Component
+public class DqlOracleConfigValidator extends AbstractDataBaseConfigValidator {
+
+    @Override
+    public void modify(DatabaseConfig connectorConfig, Map<String, String> params) {
+        super.modify(connectorConfig, params);
+        super.modifyDql(connectorConfig, params);
+
+        String schema = params.get("schema");
+        connectorConfig.setSchema(StringUtil.isBlank(schema) ? connectorConfig.getUsername().toUpperCase() : schema.toUpperCase());
+    }
 }

+ 2 - 1
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/DqlPostgreSQLConfigChecker.java → dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/DqlPostgreSQLConfigValidator.java

@@ -5,6 +5,7 @@ package org.dbsyncer.biz.checker.impl.connector;
 
 import org.dbsyncer.common.util.StringUtil;
 import org.dbsyncer.sdk.config.DatabaseConfig;
+import org.dbsyncer.sdk.connector.AbstractDataBaseConfigValidator;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
@@ -15,7 +16,7 @@ import java.util.Map;
  * @Date 2022-04-05 22:14
  */
 @Component
-public class DqlPostgreSQLConfigChecker extends AbstractDataBaseConfigValidator {
+public class DqlPostgreSQLConfigValidator extends AbstractDataBaseConfigValidator {
 
     @Override
     public void modify(DatabaseConfig connectorConfig, Map<String, String> params) {

+ 1 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/DqlSqlServerConfigValidator.java

@@ -4,6 +4,7 @@
 package org.dbsyncer.biz.checker.impl.connector;
 
 import org.dbsyncer.sdk.config.DatabaseConfig;
+import org.dbsyncer.sdk.connector.AbstractDataBaseConfigValidator;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;

+ 0 - 16
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/MySQLConfigChecker.java

@@ -1,16 +0,0 @@
-/**
- * DBSyncer Copyright 2020-2023 All Rights Reserved.
- */
-package org.dbsyncer.biz.checker.impl.connector;
-
-import org.springframework.stereotype.Component;
-
-/**
- * @Author AE86
- * @Version 1.0.0
- * @Date 2020-01-08 15:17
- */
-@Component
-public class MySQLConfigChecker extends AbstractDataBaseConfigValidator {
-
-}

+ 1 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/OracleConfigValidator.java

@@ -5,6 +5,7 @@ package org.dbsyncer.biz.checker.impl.connector;
 
 import org.dbsyncer.common.util.StringUtil;
 import org.dbsyncer.sdk.config.DatabaseConfig;
+import org.dbsyncer.sdk.connector.AbstractDataBaseConfigValidator;
 
 import java.util.Map;
 

+ 2 - 1
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/PostgreSQLConfigChecker.java → dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/PostgreSQLConfigValidator.java

@@ -5,6 +5,7 @@ package org.dbsyncer.biz.checker.impl.connector;
 
 import org.dbsyncer.common.util.StringUtil;
 import org.dbsyncer.sdk.config.DatabaseConfig;
+import org.dbsyncer.sdk.connector.AbstractDataBaseConfigValidator;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
@@ -15,7 +16,7 @@ import java.util.Map;
  * @Date 2022-04-05 22:14
  */
 @Component
-public class PostgreSQLConfigChecker extends AbstractDataBaseConfigValidator {
+public class PostgreSQLConfigValidator extends AbstractDataBaseConfigValidator {
     @Override
     public void modify(DatabaseConfig connectorConfig, Map<String, String> params) {
         super.modify(connectorConfig, params);

+ 23 - 22
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/SqlServerConfigChecker.java → dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/SqlServerConfigValidator.java

@@ -1,23 +1,24 @@
-/**
- * DBSyncer Copyright 2020-2023 All Rights Reserved.
- */
-package org.dbsyncer.biz.checker.impl.connector;
-
-import org.dbsyncer.sdk.config.DatabaseConfig;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-/**
- * @Author AE86
- * @Version 1.0.0
- * @Date 2023-11-25 23:10
- */
-@Component
-public class SqlServerConfigChecker extends AbstractDataBaseConfigValidator {
-    @Override
-    public void modify(DatabaseConfig connectorConfig, Map<String, String> params) {
-        super.modify(connectorConfig, params);
-        super.modifySchema(connectorConfig, params);
-    }
+/**
+ * DBSyncer Copyright 2020-2023 All Rights Reserved.
+ */
+package org.dbsyncer.biz.checker.impl.connector;
+
+import org.dbsyncer.sdk.config.DatabaseConfig;
+import org.dbsyncer.sdk.connector.AbstractDataBaseConfigValidator;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @Author AE86
+ * @Version 1.0.0
+ * @Date 2023-11-25 23:10
+ */
+@Component
+public class SqlServerConfigValidator extends AbstractDataBaseConfigValidator {
+    @Override
+    public void modify(DatabaseConfig connectorConfig, Map<String, String> params) {
+        super.modify(connectorConfig, params);
+        super.modifySchema(connectorConfig, params);
+    }
 }

+ 48 - 0
dbsyncer-connector/dbsyncer-connector-mysql/pom.xml

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>dbsyncer-connector</artifactId>
+        <groupId>org.ghi</groupId>
+        <version>2.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>dbsyncer-connector-mysql</artifactId>
+
+    <dependencies>
+        <!-- sdk -->
+        <dependency>
+            <groupId>org.ghi</groupId>
+            <artifactId>dbsyncer-sdk</artifactId>
+            <version>${project.parent.version}</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <!-- mysql-driver -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+
+        <!-- binlog -->
+        <dependency>
+            <groupId>com.zendesk</groupId>
+            <artifactId>mysql-binlog-connector-java</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-log4j2</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+    </dependencies>
+</project>

+ 21 - 5
dbsyncer-connector/src/main/java/org/dbsyncer/connector/sql/DQLMySQLConnector.java → dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/DQLMySQLConnector.java

@@ -1,28 +1,44 @@
-package org.dbsyncer.connector.sql;
+/**
+ * DBSyncer Copyright 2020-2023 All Rights Reserved.
+ */
+package org.dbsyncer.connector.mysql;
 
-import org.dbsyncer.connector.mysql.DqlMySQLListener;
-import org.dbsyncer.sdk.listener.DatabaseQuartzListener;
+import org.dbsyncer.connector.mysql.cdc.DqlMySQLListener;
+import org.dbsyncer.connector.mysql.validator.DqlMySQLConfigValidator;
 import org.dbsyncer.sdk.config.CommandConfig;
 import org.dbsyncer.sdk.config.ReaderConfig;
+import org.dbsyncer.sdk.connector.ConfigValidator;
 import org.dbsyncer.sdk.connector.database.AbstractDQLConnector;
 import org.dbsyncer.sdk.constant.DatabaseConstant;
 import org.dbsyncer.sdk.enums.ListenerTypeEnum;
+import org.dbsyncer.sdk.listener.DatabaseQuartzListener;
 import org.dbsyncer.sdk.listener.Listener;
 import org.dbsyncer.sdk.model.PageSql;
-import org.springframework.stereotype.Component;
 
 import java.util.Map;
 
-@Component
+/**
+ * DQLMySQL连接器实现
+ *
+ * @Author AE86
+ * @Version 1.0.0
+ * @Date 2021-11-22 23:55
+ */
 public final class DQLMySQLConnector extends AbstractDQLConnector {
 
     private final String TYPE = "DqlMySQL";
+    private final DqlMySQLConfigValidator configValidator = new DqlMySQLConfigValidator();
 
     @Override
     public String getConnectorType() {
         return TYPE;
     }
 
+    @Override
+    public ConfigValidator getConfigValidator() {
+        return configValidator;
+    }
+
     @Override
     public String getPageSql(PageSql config) {
         return config.getQuerySql() + DatabaseConstant.MYSQL_PAGE_SQL;

+ 19 - 2
dbsyncer-connector/src/main/java/org/dbsyncer/connector/mysql/MySQLConnector.java → dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/MySQLConnector.java

@@ -1,6 +1,12 @@
+/**
+ * DBSyncer Copyright 2020-2023 All Rights Reserved.
+ */
 package org.dbsyncer.connector.mysql;
 
 import org.dbsyncer.common.util.StringUtil;
+import org.dbsyncer.connector.mysql.cdc.MySQLListener;
+import org.dbsyncer.connector.mysql.validator.MySQLConfigValidator;
+import org.dbsyncer.sdk.connector.ConfigValidator;
 import org.dbsyncer.sdk.listener.DatabaseQuartzListener;
 import org.dbsyncer.sdk.config.ReaderConfig;
 import org.dbsyncer.sdk.connector.database.AbstractDatabaseConnector;
@@ -11,22 +17,33 @@ import org.dbsyncer.sdk.model.PageSql;
 import org.dbsyncer.sdk.util.PrimaryKeyUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
 
 import java.util.List;
 
-@Component
+/**
+ * MySQL连接器实现
+ *
+ * @Author AE86
+ * @Version 1.0.0
+ * @Date 2021-11-22 23:55
+ */
 public final class MySQLConnector extends AbstractDatabaseConnector {
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
 
     private final String TYPE = "MySQL";
+    private final MySQLConfigValidator configValidator = new MySQLConfigValidator();
 
     @Override
     public String getConnectorType() {
         return TYPE;
     }
 
+    @Override
+    public ConfigValidator getConfigValidator() {
+        return configValidator;
+    }
+
     @Override
     public Listener getListener(String listenerType) {
         if (ListenerTypeEnum.isTiming(listenerType)) {

+ 30 - 0
dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/MySQLException.java

@@ -0,0 +1,30 @@
+/**
+ * DBSyncer Copyright 2020-2023 All Rights Reserved.
+ */
+package org.dbsyncer.connector.mysql;
+
+/**
+ * @author AE86
+ * @version 1.0.0
+ * @date 2019/9/28 22:39
+ */
+public class MySQLException extends RuntimeException {
+
+	private static final long serialVersionUID = 1L;
+
+	public MySQLException(String message) {
+        super(message);
+    }
+
+    public MySQLException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public MySQLException(Throwable cause) {
+        super(cause);
+    }
+
+    protected MySQLException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+        super(message, cause, enableSuppression, writableStackTrace);
+    }
+}

+ 4 - 1
dbsyncer-connector/src/main/java/org/dbsyncer/connector/mysql/BinaryLogClient.java → dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/binlog/BinaryLogClient.java

@@ -1,4 +1,7 @@
-package org.dbsyncer.connector.mysql;
+/**
+ * DBSyncer Copyright 2020-2023 All Rights Reserved.
+ */
+package org.dbsyncer.connector.mysql.binlog;
 
 import com.github.shyiko.mysql.binlog.event.EventType;
 import com.github.shyiko.mysql.binlog.event.TableMapEventData;

+ 6 - 3
dbsyncer-connector/src/main/java/org/dbsyncer/connector/mysql/BinaryLogRemoteClient.java → dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/binlog/BinaryLogRemoteClient.java

@@ -1,4 +1,7 @@
-package org.dbsyncer.connector.mysql;
+/**
+ * DBSyncer Copyright 2020-2023 All Rights Reserved.
+ */
+package org.dbsyncer.connector.mysql.binlog;
 
 import com.github.shyiko.mysql.binlog.GtidSet;
 import com.github.shyiko.mysql.binlog.MariadbGtidSet;
@@ -8,7 +11,7 @@ import com.github.shyiko.mysql.binlog.io.ByteArrayInputStream;
 import com.github.shyiko.mysql.binlog.network.*;
 import com.github.shyiko.mysql.binlog.network.protocol.*;
 import com.github.shyiko.mysql.binlog.network.protocol.command.*;
-import org.dbsyncer.connector.ConnectorException;
+import org.dbsyncer.connector.mysql.MySQLException;
 import org.dbsyncer.connector.mysql.deserializer.DeleteDeserializer;
 import org.dbsyncer.connector.mysql.deserializer.UpdateDeserializer;
 import org.dbsyncer.connector.mysql.deserializer.WriteDeserializer;
@@ -653,7 +656,7 @@ public class BinaryLogRemoteClient implements BinaryLogClient {
                         String error = String.format("keepalive: Trying to restore lost connection to %s", clientId);
                         logger.info(error);
                         try {
-                            lifecycleListeners.forEach(listener -> listener.onCommunicationFailure(this, new ConnectorException(error)));
+                            lifecycleListeners.forEach(listener -> listener.onCommunicationFailure(this, new MySQLException(error)));
                         } catch (Exception e) {
                             logger.warn("keepalive error", e);
                         }

+ 7 - 4
dbsyncer-connector/src/main/java/org/dbsyncer/connector/mysql/DqlMySQLListener.java → dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/cdc/DqlMySQLListener.java

@@ -1,11 +1,14 @@
-package org.dbsyncer.connector.mysql;
+/**
+ * DBSyncer Copyright 2020-2023 All Rights Reserved.
+ */
+package org.dbsyncer.connector.mysql.cdc;
 
 import org.dbsyncer.sdk.listener.ChangedEvent;
 
 /**
- * @author AE86
- * @version 1.0.0
- * @date 2022/5/28 22:02
+ * @Author AE86
+ * @Version 1.0.0
+ * @Date 2022-05-28 22:02
  */
 public class DqlMySQLListener extends MySQLListener {
 

+ 15 - 10
dbsyncer-connector/src/main/java/org/dbsyncer/connector/mysql/MySQLListener.java → dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/cdc/MySQLListener.java

@@ -1,4 +1,7 @@
-package org.dbsyncer.connector.mysql;
+/**
+ * DBSyncer Copyright 2020-2023 All Rights Reserved.
+ */
+package org.dbsyncer.connector.mysql.cdc;
 
 import com.github.shyiko.mysql.binlog.event.DeleteRowsEventData;
 import com.github.shyiko.mysql.binlog.event.Event;
@@ -15,10 +18,12 @@ import net.sf.jsqlparser.JSQLParserException;
 import net.sf.jsqlparser.parser.CCJSqlParserUtil;
 import net.sf.jsqlparser.statement.alter.Alter;
 import org.dbsyncer.common.util.StringUtil;
-import org.dbsyncer.sdk.listener.AbstractDatabaseListener;
-import org.dbsyncer.connector.ConnectorException;
+import org.dbsyncer.connector.mysql.binlog.BinaryLogClient;
+import org.dbsyncer.connector.mysql.binlog.BinaryLogRemoteClient;
+import org.dbsyncer.connector.mysql.MySQLException;
 import org.dbsyncer.sdk.config.DatabaseConfig;
 import org.dbsyncer.sdk.constant.ConnectorConstant;
+import org.dbsyncer.sdk.listener.AbstractDatabaseListener;
 import org.dbsyncer.sdk.listener.event.DDLChangedEvent;
 import org.dbsyncer.sdk.listener.event.RowChangedEvent;
 import org.dbsyncer.sdk.model.ChangedOffset;
@@ -41,9 +46,9 @@ import java.util.stream.Stream;
 import static java.util.regex.Pattern.compile;
 
 /**
- * @version 1.0.0
  * @Author AE86
- * @Date 2020-05-12 21:14
+ * @Version 1.0.0
+ * @Date 2022-05-28 22:02
  */
 public class MySQLListener extends AbstractDatabaseListener {
 
@@ -73,7 +78,7 @@ public class MySQLListener extends AbstractDatabaseListener {
             connected = true;
         } catch (Exception e) {
             logger.error("启动失败:{}", e.getMessage());
-            throw new ConnectorException(e);
+            throw new MySQLException(e);
         } finally {
             connectLock.unlock();
         }
@@ -102,7 +107,7 @@ public class MySQLListener extends AbstractDatabaseListener {
     private void run() throws Exception {
         final DatabaseConfig config = (DatabaseConfig) connectorConfig;
         if (StringUtil.isBlank(config.getUrl())) {
-            throw new ConnectorException("url is invalid");
+            throw new MySQLException("url is invalid");
         }
         database = DatabaseUtil.getDatabaseName(config.getUrl());
         cluster = readNodes(config.getUrl());
@@ -166,7 +171,7 @@ public class MySQLListener extends AbstractDatabaseListener {
                 }
                 run();
 
-                errorEvent(new ConnectorException(String.format("重启成功, %s", client.getWorkerThreadName())));
+                errorEvent(new MySQLException(String.format("重启成功, %s", client.getWorkerThreadName())));
                 logger.error("第{}次重启成功, ThreadName:{} ", i, client.getWorkerThreadName());
                 recovery = false;
                 break;
@@ -174,7 +179,7 @@ public class MySQLListener extends AbstractDatabaseListener {
                 logger.error("第{}次重启异常, ThreadName:{}, {}", i, client.getWorkerThreadName(), e.getMessage());
                 // 无法连接,关闭任务
                 if (i == RETRY_TIMES) {
-                    errorEvent(new ConnectorException(String.format("重启异常, %s, %s", client.getWorkerThreadName(), e.getMessage())));
+                    errorEvent(new MySQLException(String.format("重启异常, %s, %s", client.getWorkerThreadName(), e.getMessage())));
                 }
             }
             try {
@@ -249,7 +254,7 @@ public class MySQLListener extends AbstractDatabaseListener {
                     String log = String.format("线程[%s]执行异常。由于MySQL配置了过期binlog文件自动删除机制,已无法找到原binlog文件%s。建议先保存驱动(加载最新的binlog文件),再启动驱动。",
                             client.getWorkerThreadName(),
                             client.getBinlogFilename());
-                    errorEvent(new ConnectorException(log));
+                    errorEvent(new MySQLException(log));
                     return;
                 }
             }

+ 3 - 0
dbsyncer-connector/src/main/java/org/dbsyncer/connector/mysql/deserializer/DatetimeV2Deserialize.java → dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/deserializer/DatetimeV2Deserialize.java

@@ -1,3 +1,6 @@
+/**
+ * DBSyncer Copyright 2020-2023 All Rights Reserved.
+ */
 package org.dbsyncer.connector.mysql.deserializer;
 
 import com.github.shyiko.mysql.binlog.io.ByteArrayInputStream;

+ 3 - 0
dbsyncer-connector/src/main/java/org/dbsyncer/connector/mysql/deserializer/DeleteDeserializer.java → dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/deserializer/DeleteDeserializer.java

@@ -1,3 +1,6 @@
+/**
+ * DBSyncer Copyright 2020-2023 All Rights Reserved.
+ */
 package org.dbsyncer.connector.mysql.deserializer;
 
 import com.github.shyiko.mysql.binlog.event.TableMapEventData;

+ 6 - 3
dbsyncer-connector/src/main/java/org/dbsyncer/connector/mysql/deserializer/JsonBinaryDeserialize.java → dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/deserializer/JsonBinaryDeserialize.java

@@ -1,3 +1,6 @@
+/**
+ * DBSyncer Copyright 2020-2023 All Rights Reserved.
+ */
 package org.dbsyncer.connector.mysql.deserializer;
 
 import com.github.shyiko.mysql.binlog.event.deserialization.json.JsonBinary;
@@ -6,9 +9,9 @@ import com.github.shyiko.mysql.binlog.io.ByteArrayInputStream;
 import java.io.IOException;
 
 /**
- * @author AE86
- * @version 1.0.0
- * @date 2022/8/30 0:22
+ * @Author AE86
+ * @Version 1.0.0
+ * @Date 2022-08-30 00:22
  */
 public final class JsonBinaryDeserialize {
 

+ 3 - 0
dbsyncer-connector/src/main/java/org/dbsyncer/connector/mysql/deserializer/UpdateDeserializer.java → dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/deserializer/UpdateDeserializer.java

@@ -1,3 +1,6 @@
+/**
+ * DBSyncer Copyright 2020-2023 All Rights Reserved.
+ */
 package org.dbsyncer.connector.mysql.deserializer;
 
 import com.github.shyiko.mysql.binlog.event.TableMapEventData;

+ 3 - 0
dbsyncer-connector/src/main/java/org/dbsyncer/connector/mysql/deserializer/WriteDeserializer.java → dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/deserializer/WriteDeserializer.java

@@ -1,3 +1,6 @@
+/**
+ * DBSyncer Copyright 2020-2023 All Rights Reserved.
+ */
 package org.dbsyncer.connector.mysql.deserializer;
 
 import com.github.shyiko.mysql.binlog.event.TableMapEventData;

+ 3 - 4
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/DqlMySQLConfigChecker.java → dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/validator/DqlMySQLConfigValidator.java

@@ -1,10 +1,10 @@
 /**
  * DBSyncer Copyright 2020-2023 All Rights Reserved.
  */
-package org.dbsyncer.biz.checker.impl.connector;
+package org.dbsyncer.connector.mysql.validator;
 
 import org.dbsyncer.sdk.config.DatabaseConfig;
-import org.springframework.stereotype.Component;
+import org.dbsyncer.sdk.connector.AbstractDataBaseConfigValidator;
 
 import java.util.Map;
 
@@ -13,8 +13,7 @@ import java.util.Map;
  * @Version 1.0.0
  * @Date 2020-01-07 15:17
  */
-@Component
-public class DqlMySQLConfigChecker extends AbstractDataBaseConfigValidator {
+public class DqlMySQLConfigValidator extends AbstractDataBaseConfigValidator {
 
     @Override
     public void modify(DatabaseConfig connectorConfig, Map<String, String> params) {

+ 15 - 0
dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/validator/MySQLConfigValidator.java

@@ -0,0 +1,15 @@
+/**
+ * DBSyncer Copyright 2020-2023 All Rights Reserved.
+ */
+package org.dbsyncer.connector.mysql.validator;
+
+import org.dbsyncer.sdk.connector.AbstractDataBaseConfigValidator;
+
+/**
+ * @Author AE86
+ * @Version 1.0.0
+ * @Date 2020-01-08 15:17
+ */
+public class MySQLConfigValidator extends AbstractDataBaseConfigValidator {
+
+}

+ 2 - 0
dbsyncer-connector/dbsyncer-connector-mysql/src/main/resources/META-INF/services/org.dbsyncer.sdk.spi.ConnectorService

@@ -0,0 +1,2 @@
+org.dbsyncer.connector.mysql.MySQLConnector
+org.dbsyncer.connector.mysql.DQLMySQLConnector

+ 7 - 4
dbsyncer-connector/src/main/test/BinaryLogRemoteClientTest.java → dbsyncer-connector/dbsyncer-connector-mysql/src/test/java/BinaryLogRemoteClientTest.java

@@ -1,7 +1,10 @@
+/**
+ * DBSyncer Copyright 2020-2023 All Rights Reserved.
+ */
 import com.github.shyiko.mysql.binlog.event.*;
 import org.dbsyncer.sdk.constant.ConnectorConstant;
-import org.dbsyncer.connector.mysql.BinaryLogClient;
-import org.dbsyncer.connector.mysql.BinaryLogRemoteClient;
+import org.dbsyncer.connector.mysql.binlog.BinaryLogClient;
+import org.dbsyncer.connector.mysql.binlog.BinaryLogRemoteClient;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -12,9 +15,9 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 /**
- * @version 1.0.0
  * @Author AE86
- * @Date 2020-11-13 22:25
+ * @Version 1.0.0
+ * @Date 2021-11-22 23:55
  */
 public class BinaryLogRemoteClientTest {
 

+ 9 - 12
dbsyncer-connector/pom.xml

@@ -14,6 +14,7 @@
         <module>dbsyncer-connector-elasticsearch</module>
         <module>dbsyncer-connector-file</module>
         <module>dbsyncer-connector-kafka</module>
+        <module>dbsyncer-connector-mysql</module>
     </modules>
 
     <dependencies>
@@ -38,11 +39,18 @@
             <version>${project.parent.version}</version>
         </dependency> -->
 
-        <!-- dbsyncer-connector-kafka -->
+        <!-- dbsyncer-connector-kafka
         <dependency>
             <groupId>org.ghi</groupId>
             <artifactId>dbsyncer-connector-kafka</artifactId>
             <version>${project.parent.version}</version>
+        </dependency> -->
+
+        <!-- dbsyncer-connector-mysql -->
+        <dependency>
+            <groupId>org.ghi</groupId>
+            <artifactId>dbsyncer-connector-mysql</artifactId>
+            <version>${project.parent.version}</version>
         </dependency>
 
         <!-- Spring-JDBC -->
@@ -51,12 +59,6 @@
             <artifactId>spring-jdbc</artifactId>
         </dependency>
 
-        <!-- mysql-driver -->
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-        </dependency>
-
         <!-- oracle-driver -->
         <dependency>
             <groupId>com.oracle</groupId>
@@ -101,11 +103,6 @@
             <artifactId>jsqlparser</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>com.zendesk</groupId>
-            <artifactId>mysql-binlog-connector-java</artifactId>
-        </dependency>
-
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-log4j2</artifactId>

+ 1 - 2
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/AbstractDataBaseConfigValidator.java → dbsyncer-sdk/src/main/java/org/dbsyncer/sdk/connector/AbstractDataBaseConfigValidator.java

@@ -1,12 +1,11 @@
 /**
  * DBSyncer Copyright 2020-2023 All Rights Reserved.
  */
-package org.dbsyncer.biz.checker.impl.connector;
+package org.dbsyncer.sdk.connector;
 
 import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.common.util.JsonUtil;
 import org.dbsyncer.sdk.config.DatabaseConfig;
-import org.dbsyncer.sdk.connector.ConfigValidator;
 import org.dbsyncer.sdk.model.SqlTable;
 import org.springframework.util.Assert;