작성
·
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 로 실행
KST?? 시간대 설정은 이미 해둔 상태지만 해당 문제가 나온다.
SELECT @@global.time_zone, @@session.time_zone; 으로 조회시 system으로 나오며
SET GLOBAL time_zone = '+09:00';
SELECT @@global.time_zone;
을 통해 다시 한번 시간대를 적용/확인
이후 실행하니 정상적으로 등록 성공
----------------------
[미해결]
192.168.56.101의 경우 에러
3306 close
방화벽 규칙 추가
bind-address 주석 확인, 포트 3306인지 확인
권한확인
그 외 방법을 계속 찾고 있는 중입니다.