python | fabric | solved | ERROR 2002 (HY000): Can't connect to local server through socket '/run/mysqld/mysqld.sock' (2)

Chris-Yang·2022년 8월 24일
0

Solved problem

목록 보기
4/4
post-thumbnail
post-custom-banner


> 사건발생

▶ 상황

  • python fabric으로 mariadb docker container에 db dump를 하는 중이었습니다.
  • 터미널에 스크립트로 입력하는 경우 이상 없이 진행되던 명령어들이었습니다
  • 그러나 fabric을 통해 실행하니 ERROR 2002 (HY000): Can't connect to local server through socket '/run/mysqld/mysqld.sock' (2)라는 error가 발생하였습니다.
  • error가 발생되는 코드는 db dump를 하는 sudo('docker exec mariadb sh /mariadb_script/create_db.sh')였습니다.

> 수사 착수

▶ 추적

  • 우선 구글링을 통해서는 별다른 해결 방법이 없었습니다.
  • 그러던 중 해당 로직을 2번 실행하는 경우 진행되는 케이스를 통해 사용하려는 컨테이너가 실행되고 있으면 진행된다는 사실을 발견하였습니다.
  • 그러나 fabric은 에러가 발생하면 멈추기 때문에 이 상태로는 fabric 특성상 반드시 사용하는 기능별 함수 연계를 구현할 수 없었습니다.
  • 컨테이너를 미리 구동시켜놓으면 되긴 했지만 그럴 수 없는 케이스와 마주할 수도 있고, 원인을 모르고 넘어가고 싶지도 않았습니다.(사실 약간의 시간적 여유가 있어서 파고듦)

▶ 검거

  • "컨테이너가 미리 구동 중이면 된다"는 사실과 "fabric 에러가 발생하지 않아야 한다"는 조건 안에서 할 수 있는 첫번째 방법은 은 sudo('docker-compose up -d')을 연달아 2번 넣는 방법이었고 성공했습니다.
  • 하지만 방법의 무식함이 마음에 안들었고 잠시 생각하던 중 문득 해당 컨테이너가 올라가서 안정되기 전에 db dump가 실행되기 때문에 문제가 발생했을거라는 생각이 들었습니다.
  • 그리하여 docker-compose 꾸러미가 올라가는 코드와 db dump를 시작하는 코드 사이 간격을 주기 위해 sleep을 사용해 보았고 성공하였습니다.
sudo('docker-compose up -d')
for i in range(1, 3 + 1):
    time.sleep(1)
    print(f'--> For stable next step.. Now pass about \"{i} second\" after start')

sudo('docker exec mariadb sh /mariadb_script/create_db.sh') 

[20220825 추가]

  • 빠르게 동일한 원인으로 문제가 발생하였습니다.
  • 해당 로직 이후 바로 다시 docker container를 실행시켜야 했는데 `requests.exceptions.ConnectionError: ... 에러가 떴고 위와 같이 sleep을 연계해주어 즉시 해결하였습니다.

🌈작은 회고

한달 전 쯤 cto님이 "우리와 가장 닮은 직업이 뭐라고 생각하시느냐"라고 물어보셨다.

"음.. 노가다..?"라고 속으로만 말했었다.

그리고 곧이어 이렇게 말씀하였다.
"저는 형사라고 생각합니다.
작은 단서들을 모아 사건을 해결하는 모습이 형사와 비슷하다고 생각됩니다
우리는 error log를 통해 얻은 단서들을 통해 문제를 해결해야 합니다."

오늘도 이말에 공감했고 또다른 닮은 점도 떠올랐다.
며칠동안 자동차 안에서 철야로 잠복근하는 모습,
그래서 못씻어서 벅벅 긁으며 전방을 주시하는 모습.

한 때 형사가 꿈이었던 나는 지금 행복할듯 말듯한
묘한 기분이 든다.

profile
sharing all the world
post-custom-banner

0개의 댓글