강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

좋은 낙지님의 프로필 이미지
좋은 낙지

작성한 질문수

카프카 완벽 가이드 - 커넥트(Connect) 편

Debezium Source Connector 생성하기

[수업질문] mysql_cdc_oc_source_test01.json 업로드 에러

작성

·

1.2K

·

수정됨

0

안녕하세요. 'Debezium Source Connector 생성하기'

수강중에 진행이 막혀 질문드립니다.

config를 register_connector로 등록할 때 발생한 이슈인데

해당 이슈 :  {
    "error_code": 400,
    "message": "Connector configuration is invalid and contains the following 1 error(s):\nUnable to connect: Communications link failure\n\nThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.\nYou can also find the above list of errors at the endpoint `/connector-plugins/{connectorType}/config/validate`"
}

= 커넥터 구성이 잘못되어 MySQL 서버에 연결할 수 없다로 해석되어 다음과 같은 해결책을 시도해보았습니다.


0. http GET http://localhost:8083/connector-plugins | jq '.[].class' 조회시 io.debezium.connector.mysql.MySqlConnector 정상등록 확인

1.MySQL 서버 정상실행중 확인

2.포트 확인 > SHOW VARIABLES LIKE 'port'; >> 3306

3.네트워크 연결 상태 확인

3-1. mysql 외부접속 허용 확인 : my.cnf에서 bind항목 점검 >> 없음=기본세팅인 허용

3-2. 방화벽 규칙 확인 : Chain INPUT, FORWARD, OUTPUT : Accept , sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

4.SSL 문제인가? >> my.cnf에 따로 ssl-mode 설정은 없음.

5.ifconfig >> enp0s8 inet 192.168.56.101

 

이렇게 확인했음에도 해결되지않아 도움요청드립니다.

 

 

 

 

 

 

 

config

{
    "name": "mysql_cdc_oc_source_test01",
    "config": {
        "connector.class": "io.debezium.connector.mysql.MySqlConnector",
        "tasks.max": "1",
        "database.hostname": "192.168.56.101",
        "database.port": "3306",
        "database.user": "connect_dev",
        "database.password": "connect_dev",
        "database.server.id": "10000",
        "database.server.name": "test01",
        "database.include.list": "oc",
        "database.allowPublicKeyRetrieval": "true",
        "database.history.kafka.bootstrap.servers": "192.168.56.101:9092",
        "database.history.kafka.topic": "schema-changes.mysql.oc",
        "key.converter": "org.apache.kafka.connect.json.JsonConverter",
        "value.converter": "org.apache.kafka.connect.json.JsonConverter"
    }
}

connect 로그는 다음과 같습니다.

ERROR Failed testing connection for jdbc:mysql://192.168.56.101:3306/?useInformationSchema=true&nullCatalogMeansCurrent=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL&connectTimeout=30000 with user 'connect_dev' (io.debezium.connector.mysql.MySqlConnector:103)
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
        at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)
        at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)
        at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:829)
        at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:449)
        at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:242)
        at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
        at io.debezium.jdbc.JdbcConnection.lambda$patternBasedFactory$1(JdbcConnection.java:244)
        at io.debezium.jdbc.JdbcConnection.connection(JdbcConnection.java:888)
        at io.debezium.jdbc.JdbcConnection.connection(JdbcConnection.java:883)
        at io.debezium.jdbc.JdbcConnection.connect(JdbcConnection.java:411)
        at io.debezium.connector.mysql.MySqlConnector.validateConnection(MySqlConnector.java:98)
        at io.debezium.connector.common.RelationalBaseSourceConnector.validate(RelationalBaseSourceConnector.java:54)
        at org.apache.kafka.connect.runtime.AbstractHerder.validateConnectorConfig(AbstractHerder.java:459)
        at org.apache.kafka.connect.runtime.AbstractHerder.lambda$validateConnectorConfig$2(AbstractHerder.java:362)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure

답변 1

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

강의 실습 코드랑 동일하게 환경을 적용하셨는데, 안되었다는 말씀 이시죠?

음.. database.hostname을 localhost나 127.0.0.1 로 변경해 보시고 다시 한번 테스트 부탁드립니다.

또 mysql 서버가 떠 있는지 확인 부탁드립니다.

sudo systemctl status mysql

그래도 안되면 Connect/Kafka 를 종료하시고 VM 종료 후 다시 기동 및 Mysql도 기동 확인하신 후 다시 테스트 해보십시요.

그리고 혹시 dbeaver가 있으시면 vm을 띄운 PC에 있으시면 192.168.56.101 등으로 위에 설정한 JSON 환경으로 JDBC 접속이 가능하신지 함 테스트 부탁드립니다.

 

좋은 낙지님의 프로필 이미지
좋은 낙지
질문자

답변 감사합니다!
결론적으로 127에서는 시간대설정을 거쳐 등록 성공하였고

192로는 디비버로도 실패하여 해당 원인을 파악해 나가겠습니다.

[해결과정]

192.168.56.101 대신 127.0.0.1 로 실행

ERROR Failed testing connection for jdbc:mysql://127.0.0.1:3306/?useInformationSchema=true&nullCatalogMeansCurrent=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL&connectTimeout=30000 with user 'connect_dev' (io.debezium.connector.mysql.MySqlConnector:103)

java.sql.SQLException: The server time zone value 'KST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'connectionTimeZone' configuration property) to use a more specific time zone value if you want to utilize time zone support.

KST?? 시간대 설정은 이미 해둔 상태지만 해당 문제가 나온다.

SELECT @@global.time_zone, @@session.time_zone; 으로 조회시 system으로 나오며

SET GLOBAL time_zone = '+09:00';

SELECT @@global.time_zone;

을 통해 다시 한번 시간대를 적용/확인

이후 실행하니 정상적으로 등록 성공

----------------------

[미해결]

192.168.56.101의 경우 에러

ERROR Failed testing connection for jdbc:mysql://192.168.56.101:3306/?useInformationSchema=true&nullCatalogMeansCurrent=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL&connectTimeout=30000 with user 'connect_dev' (io.debezium.connector.mysql.MySqlConnector:103)

com.mysql.cj.jdbc.exceptions.CommunicationsException:(register_connector)

3306 close

nmap 192.168.56.101 -p 3306
Starting Nmap 7.80 ( https://nmap.org ) at 2023-05-12 14:13 KST
Nmap scan report for kms-VirtualBox (192.168.56.101)
Host is up (0.00013s latency).

PORT     STATE  SERVICE
3306/tcp closed mysql

Nmap done: 1 IP address (1 host up) scanned in 0.02 seconds

방화벽 규칙 추가

sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

sudo iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:mysql

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

 bind-address 주석 확인, 포트 3306인지 확인

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

권한확인

mysql> select user,host,password_last_changed from user;
+------------------+-----------+-----------------------+
| user             | host      | password_last_changed |
+------------------+-----------+-----------------------+
| connect_dev      | %         | 2023-05-03 13:34:08   |
| root             | %         | 2023-05-03 13:33:01   |
| debian-sys-maint | localhost | 2023-05-03 13:31:41   |
| mysql.infoschema | localhost | 2023-05-03 13:31:40   |
| mysql.session    | localhost | 2023-05-03 13:31:40   |
| mysql.sys        | localhost | 2023-05-03 13:31:40   |
| root             | localhost | 2023-05-03 13:31:40   |
+------------------+-----------+-----------------------+
7 rows in set (0.00 sec)

그 외 방법을 계속 찾고 있는 중입니다.

권 철민님의 프로필 이미지
권 철민
지식공유자

일단 강의 실습을 위한 해결은 되어서 다행입니다 ^^

 

좋은 낙지님의 프로필 이미지
좋은 낙지
질문자

이후 문제해결입니다.

config에

"database.connectionTimeZone": "Asia/Seoul"

옵션을 추가해서 명시하였더니 192.168.56.101에서도 정상작동하였습니다.

시간설정이
system_time_zone : KSH
time_zone : SYSTEM
인 경우 mysqld.cnf 파일을 수정할 것 없이 위의 옵션을 추가하였습니다.

권 철민님의 프로필 이미지
권 철민
지식공유자

음, 그렇군요.

좋은 정보 업데이트 감사합니다 ^^

좋은 낙지님의 프로필 이미지
좋은 낙지

작성한 질문수

질문하기