ERROR!

[에러 해결] The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

짱 센 2023. 10. 16. 23:31

요즘 GCP server에 연동해서 flag 값 튜닝하고 벤치마킹 돌리는 과정을 진행하고 있는데 (그 이유는 Cloud Database tuning을 진행해보려고) twitter 워크로드에서만 계속해서 오류가 발생했다.

 

벤치마킹 툴로는 BenchBase를 사용하고 있다.

https://github.com/cmu-db/benchbase

 

GitHub - cmu-db/benchbase: Multi-DBMS SQL Benchmarking Framework via JDBC

Multi-DBMS SQL Benchmarking Framework via JDBC. Contribute to cmu-db/benchbase development by creating an account on GitHub.

github.com

 

tpcc, tpch, ycsb에 대해서는 오류없이 잘 실행이 됐는데 이상하게 twitter 연동만 안돼서 국내학회 논문도 결국 클라우드를 못돌려보고 로컬에서 실험을 진행했다.

 

학회 끝나고 benchbase 깃허브 이슈를 통해서도 많은 시도 방법들을 추천받았는데 해결되지가 않았고 ㅠㅠ benchbase 쪽에서는 서버 문제인 것 같다고 하였다.. 근데 내 생각에도 서버 문제가 맞는 것이 local에서는 문제없이 잘 돌아가는데 GCP 연동만하면 문제가 생겼다.

 

그래서.. 각 잡고 오류 해결을 해보려고 애썼다..

삽질 매우 많이 했다.. 몇 일을 고생한건지 모르겠소,,

 

이게 해당 오류였다.. 아무래도 mysql과 연결이 되지 않았다는 것 같았고 이리 저리 찾아보았을 때 가장 많이 나오는 해결방안은 이거였다.

 

≫ 서버 연결 <url>에 useSSL=false 추가하기

<url>jdbc:mysql://ip address:3306/benchbase?useSSL=false&amp;어쩌구&amp;저쩌구&amp;</url>

 

이런식으로! 하지만 해결이 될리가 없지 어림도 없죠?

 

그 다음으로 많이 나오는 방법은

≫ my.cnf 파일에 있는 bind-address=127.0.0.1 을 주석처리하기 혹은 bind-address=0.0.0.0 으로 변경하기.

 

이 방법은 로컬호스트로만 접속을 허용하는 부분이 문제가 될 수 있기 때문에 이 부분을 수정하면 오류가 발생하지 않는다고 한다.

하지만? 어림도 없어요~ 난 안됐음 ㅎㅎ

 

진짜 서버 하나도 모르는데 이게 뭔 일이야 엉엉 하다가 찾게된 진짜 너무너무 천사같은 stackoverflow 답변 발견,, 내 구원자

https://stackoverflow.com/questions/6865538/solving-a-communications-link-failure-with-jdbc-and-mysql

 

Solving a "communications link failure" with JDBC and MySQL

I'm trying to connect to the local MySQL server but I keep getting an error. Here is the code. public class Connect { public static void main(String[] args) { Connection conn = null;...

stackoverflow.com

 

첫번째 답변,, 진짜 엄청난 구원자.. ㅠㅠㅠㅠ 이 분도 삽질을 많이 해봤다하시면서 이렇게 싹 정리를 해주셨는데 진짜.. 너무 천사이신거 아니냐구,,,

그래서 결국 내 문제는 뭐였냐면 

wait_timeout / interactive_timeout / connect_timeout 에 대한 flag value가 지정되어있지 않아서 였다...

튜닝하기 위한 flag를 따로 정리했었는데 timeout은 default로 알아서 지정이 되겠지~ 하고 GCP flag 목록에 넣지 않았는데 .. 안넣으니까 그냥 오류나면 개복치마냥 튕겨버린 것 ,,

 

GCP flag에 저 세 개 falg 값 3600 (1시간)으로 지정하고 돌리니까 아주 잘됐다 ㅠㅠ 엉엉

참고로 저 세 개 flag에 대한 설명은 여기에 자세하게 되어있다.

https://hongal.tistory.com/14

 

[DB][MySQL][관리] MySQL의 TimeOut

1. Time Out의 종류 - connect_timeout (bad handshake timeout) - interactive_timeout (interactive 모드에서 connection time out) ※ interactive 모드는 'mysql>' 과 같은 프롬프트 있는 콘솔이나 터미널 모드를 말합니다.- wait_time

hongal.tistory.com

 

드디어 해결!! 주간보고 때 교수님께 자랑해야겠다 후후후

 

이 글을 보시는 모든 분들도 에러 해결이 말끔히 되시길,,, !!