EC2에서 innoDB 손상 시 해결 방법(1)

2023. 3. 22. 10:14·개발 공부/오류 해결

- 오류 파악

EC2 인스턴스를 이용해 MySQL을 외부 접속해서 사용하고 있었는데 AWS를 공부하다가 사용하던 인스턴스를 중지하고 재시작을 하게 되었다. 나는 중지하면 퍼블릭 ip가 바뀌는 지 몰랐었고 재 시작해서 퍼블릭 ip가 바뀌니 Workbench에서 연결 할 수 없다고 나왔다. SSH로 접속할 수 있는 키 파일을 가지고 있지 않았기 때문에 키만 잘 바꾸면 될꺼라고 생각했고 그 과정에서 여러가지를 배웠지만 결국 아무 관련이 없었다.

 

**관련 포스트 이다

https://codingsook.tistory.com/40

 

aws 인스턴스 키 파일을 잃어버린 당신 괜찮아 키 페어 변경 방법 알려줄게

AWS 공부를 위해 서버를 추가로 만들다 보니 요금이 부담되 프로젝트가 배포된 AWS EC2 서버를 중지했다. 그런데 이게 왠걸 중지하고 나니까 퍼블릭 ip가 바뀌어서 프로젝트에 접근할 수가 없다😫

codingsook.tistory.com

 

 

그래서 나는 몇일을 구글링하며 방법을 찾았다. 그러던 중에 conf 파일 중 일부를 실수로 지웠는데 당황한 나머지 윈도우에서 쓰던 Ctrl + z를 눌러됬지만 나오는 ^Z 만 나왔더랜다. 그래서 나도 모르게 접속해있던 Bash를 급하게 꺼버리고 말았다.

아마 이렇게 하면서 엔진인 innodb 파일이 손상된 거 같다. 이때 tomcat도 같이 망가졌는지 http도 열어뒀었는데 화면이 뜨지 않았다. 그렇게 몇일 더 찾다가 이건 내 지식을 벗어났구나를 느꼈고 오픈 카톡방에 물어봤는데 익명의 천사분(a.k.a 싯포)이 장장 4시간 동안 도와 주셨다.....😭😭😭 

 

 

 

수많은 문의의 현장들...싹 다 CLI다

 

그래서 다시 카톡을 복기하며 공부하려고 한다

 


 

-오류 해결하며 배웠던 명령어 정리

먼저 확인했던 건

netstat -nlp | grep 3306

 

netstat(network state)

네트워크 연결, 라우팅테이블, 포트 등을 출력하는 명령어이다.

 

옵션

-n : 포트 또는 사용자 이름을 확인하는 대신 숫자로 된 주소를 표시한다.

-l : 연결된 포트만 출력한다.

-a : 연결이 됐든안됐든 사용중인 모든 포트를 출력한다. 

-p : 데몬의 이름과 PID를 출력한다.

 

netstat -nlp 를 입력하면, 연결된 포트만 출력이 되고 어떤 데몬이 사용중인지 출력해준다.

 

grep은 디렉토리 내의 파일을 검색하거나 파일 내에서 본인이 찾고 싶은 문자열이나 정규 표현식을 포함하고 있는 line을 찾는 데에 주로 사용된다. 

grep  3306 은 MySQL/MariaDB의 기본 포트가 3306이기 때문에 상태가 어떤지 확인하기 위해서였다

 

즉

netstat -nlp | grep 3306

3306으로 연결된 포트 출력 및 데몬 사용 확인 이었던 것이다

 

다음으로는

sudo su

오류를 찾을 때는 root 계정으로 들어가서 찾는 게 좋다고 한다

sudo su는 root(관리자) 계정으로 들어가는 명령어이다

 

루트 계정으로 들어온 후 

/opt/bitnami/mariadb/bin/mariadbd-safe

 

MariaDB 데몬을 실행시키는 명령어이다. 내 EC2는 흔히들 쓰는 ubuntu 아니고 bitnami 였어서 경로는 조금 다를 수 있다. 먼저 데이터베이스 바이너리 파일을 찾고 그쪽 경로의 파일들을 다 뒤졌다

 

그리고 나서 

tail -n 100 /opt/bitnami/mariadb/logs/mysqld.log

tail 명령어
tail 명령어는 파일의 마지막 행을 기준으로 지정한 행까지의 파일 내용 일부를 출력해주는 명령어입니다. 기본값으로는 마지막 10줄을 출력하며 주로 tail은 리눅스에서 오류나 파일 로그를 실시간으로 확인할 때 매우 유용하게 사용된다. 

  • -f : tail을 종료하지 않고 파일의 업데이트 내용을 실시간으로 계속 출력한다.
  • -n (라인 수) : 파일의 마지막줄부터 지정한 라인수까지의 내용을 출력한다.
  • -c (바이트 수) : 파일의 마지막부터 지정한 바이트만큼의 내용을 출력한다.
  • -q : 파일의 헤더와 상단의 파일 이름을 출력하지 않고 내용만 출력한다.
  • -v : 출력하기전에 파일의 헤더와 이름 먼저 출력한 후 파일의 내용을 출력한다.

 

 

수많은 로그들...맨 마지막 그래 저 놈이 문제 해결의 단서였다

그러면 이런 식으로 mariaDB가 실행된 후 로그들이 나오는데 일정한 사이클이 중복된다는 것을 알 수 있었고 100개 중 이 로그가 한 사이클이었다

 

https://dba.stackexchange.com/questions/317572/mariadb-missing-file-checkpoint

 

MariaDB: Missing FILE_CHECKPOINT

Running MariaDB v10.9.3 on Arch Linux. I've hosted a file storage cloud with it for years. Recently decided to create a database for another project, and am very new to MySQL interactions, so it's

dba.stackexchange.com

우리가 참고한 오류 사이트는 여기 였고

mariaDB 설정 파일

여기에 innodb_force_recovery=6 이걸 추가해주는 식이었다

이 명령어는 한 마디로 강제로 innodb를 구동시키는 명령어이다. 기본값은 0이고 1~6까지 있는데 값이 커질 수록 데이터가 영구적으로 날아갈 수 있다고 한다. 물론 그 당시는 몰랐고 이 명령어에 대해 찾다보니 알게 되었다(휴 데이터가 손상되지 않아서 다행이다)이 명령어는 내용이 너무 방대해서 나중에 따로 정리해야겠다.

보통은 innodb_force_recovery=4를 추천하고 1부터 +1씩 올리는 게 좋다고 한다 

 

 

**2편에서 이어집니다

 

 

'개발 공부 > 오류 해결' 카테고리의 다른 글

EC2 복구 회고록(블로그 글을 믿지 말자)  (0) 2023.06.06
EC2에서 innoDB 손상 시 해결 방법(2)  (1) 2023.03.22
aws 인스턴스 키 파일을 잃어버린 당신 괜찮아 키 페어 변경 방법 알려줄게  (0) 2023.03.10
'개발 공부/오류 해결' 카테고리의 다른 글
  • EC2 복구 회고록(블로그 글을 믿지 말자)
  • EC2에서 innoDB 손상 시 해결 방법(2)
  • aws 인스턴스 키 파일을 잃어버린 당신 괜찮아 키 페어 변경 방법 알려줄게
코딩숙
코딩숙
개발이라는 끝이 없는 바다 묵묵히 꾸준히 항해하기
  • 코딩숙
    코딩숙
    코딩숙
  • 전체
    오늘
    어제
    • 분류 전체보기 (63)
      • CS 공부 (17)
        • 클라우드 (3)
        • 네트워크 (3)
      • 개발 공부 (40)
        • 오류 해결 (4)
        • 알고리즘 (12)
        • Spring (3)
        • JPA (2)
        • TIL(오늘 내가 배운 것) (9)
        • 코드복습 (1)
        • 디자인 패턴 (1)
      • IT 관련 영상 메모 (1)
      • 데일리피드백 (0)
      • Tools (1)
      • Wishy (이력서 평가 프로젝트) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    개발자
    프로그래머스 네트워크 자바
    도메인설계
    데이터베이스 백업
    자바
    isAfter()
    setter method
    http
    백준
    innodb
    인프런
    programmers #정수 내림차순으로 배치하기
    키 페어 변경
    404 Not Found
    appsmith
    302 Found
    키 페어 분실
    마이크로서비스
    데이터 타입
    getter method
    java
    프로그래머스
    isBefore()
    user mode
    HTTP BODY
    데이터베이스 손상
    개발공부
    변수
    JPA
    게임 맵 최단거리 자바
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
코딩숙
EC2에서 innoDB 손상 시 해결 방법(1)
상단으로

티스토리툴바