만쥬의 개발일기
article thumbnail

잘 동작하던 스마트팜 서버에서 갑자기 DB를 불러오지 못하는 현상이 발생했다.

에러를 잡으려고 콘솔에 찍어보려 했는데, 콘솔에 메시지도 전혀 찍히지 않는 것이었다..

원인을 찾아보니 , forever로 실행한 애플리케이션은 콘솔에 메시지가 찍히지 않는다는 것이다.

생각해보면 당연한것임을,,

그래서 node명령어로 서버 실행 후 콘솔을 확인해보니

Error connecting to database: Error: Packets out of order. Got: 1 Expected: 0

이런 에러메시지가 찍혔고, 데이터베이스와의 연결에 문제가 생긴것을 확인했다.

 mysql -h DB_IP -u DB_ID -p

위 명령어로 데이터 베이스에 접속을 시도하자

ERROR 1129 (HY000): Host '접속IP' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

위 에러가 발생했다.

이건 뭐지? 하고 구글링으로 찾아보니 [원격 서버에서 Mysql Server로 단순 커넥션 한 뒤 close하면
Mysql은 비정상적인 접속으로 판단하여 해당 ip를 블럭킹한다.]
라곤하는데,, 쉽게 말해 MySQL 서버에서 동일한 IP 주소로 너무 많은 연결 오류가 발생할 경우 해당 IP 주소를 차단하고, 그때 발생하는 에러메시지라고 한다. (기본값은 10)

어쩌다 우리의 IP가 차단당한지는 잘 모르겠지만, 어쨋든 해결해주자.

 

해결 방법으로는, 현재 DB의 IP주소는 Nas의 IP와 동일하므로, Nas에 SSH로 접속하여 로컬DB접속을 통해

해결하기로 하였다.

 

1.로컬 터미널에서 다음 명령어로 Nas에 SSH로 접속한다.

ssh -p PORT_NUM NAS_ID@NAS_IP

2.해당 ip에서 로컬로 mysql에 접속한다.

mysql -u DB_ID -p

3. DB콘솔에mysqladmin -u root -p flush-hosts 또는 flush hosts 쿼리를 날린다.

다음과 같은 문장이 나오면 성공적으로 차단이 해제된 것

4. 이제 차단이 해제됐음을 다시 서버를 실행하고, DB 통신을 테스트하여 확인한다.

 

잘 나오는 모습..! 

 

 

profile

만쥬의 개발일기

@KangManJoo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!