본문 바로가기
MySQL 에러 처리법

9. snapshot으로 mysqldump 실행 시 장애가 발생하는 경우

by 모모레 2014. 3. 24.

 

 

 

Replication 연결을 위해서나 복구를 위한 백업을 진행하는 경우에, snapshot으로 dump를 받게 되는데요.

 

그와 같은 경우에 서비스 장애를 유발할 수 있는 상황이 있습니다.

 

다음의 예제를 보시죠~

 

 

위 예제에서 보면 세션 id가 253372 즉, 파란색 박스 안에 들어있는 세션이 보이는데, 이것은 현재 4319초나 진행된 select 쿼리이다. 이 쿼리가 현재 진행중이고, 그 이후에 실행된 id 257695 즉, 보라색 박스에 들어있는 세션은 현재 flush tables 진행중이다. 헌데 상태는 waiting for table flush 이다.

기본적으로 flush tables는 실행되는 쿼리가 아무것도 없는 상태에서만 진행되는 것으로, 파란색 박스안에 들어있는 세션처럼 오랜 시간동안 동작하는 쿼리가 있게 되면, 화면에 보이는 것과 같이 대기에 빠지게 된다.

근데 문제는 바로 다음이다. flush tables는 실행 시 아무 쿼리도 실행되어서는 안되는데, 즉, exclusive lock과 같이 동작하는데, 이 구문에 대한 실행이 대기에 빠짐으로서 이 이후에 실행되는 모든 쿼리가 대기 상태에 빠지게 된다.즉, 빨간색 박스안에 보이는 세션들은 모두 대기 상태에 빠진 쿼리들이 된다.

 

이런 경우에는 파란색 쿼리(대기를 유발하는 쿼리)나 보라색 쿼리를 중지 시키면 바로 풀리게 된다.

 

위 예제는 5.5.30 버젼에서 실행한 것인데, 만약 더 낮은 버젼의 서버라면 waiting for table scan이라는 상태가 안보일 수도 있다. 이럴때는 세션 정보로 유추하여 처리하면 된다. 현상은 동일하다.