- 오류 파악
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시간 동안 도와 주셨다.....😭😭😭
그래서 다시 카톡을 복기하며 공부하려고 한다
-오류 해결하며 배웠던 명령어 정리
먼저 확인했던 건
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
우리가 참고한 오류 사이트는 여기 였고
여기에 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 |