본문 바로가기
기초 튼튼탄탄탄/Database

[MySQL] replication 깨짐 복구 (ERROR 1062)

by 잇서니 2021. 1. 15.
반응형

 

MySQL replication 구성(master-slave)은 slave가 master의 내용을 계속해서 sync를 맞추는 형태입니다. replication 과정은 이 글에 정리해두었습니다. 그럼 replication이 깨질 때 어떻게 해야 할까요?

 

우선 replication 상태를 확인해보겠습니다. 

show master status \G;

master가 어떤 binlog 파일에 몇 번째(pos) 사항을 기록하고 있는지 확인할 수 있습니다.

show slave status \G;

slave가 master의 어떤 binlog파일의 몇 번째(Log_pos) 사항을 읽고 처리하는지 확인할 수 있습니다.

slave상태                                       /                                 master 상태

 

slave는 master의 binlog의 어떤 시점(pos)을 읽고 실행합니다. master의 pos와 slave의 pos는 거의 일치합니다(slave가 master를 쫓아간다). slave의 replication 작업이 바로바로 진행되기 때문입니다. pos 값의 차이가 커지면(master의 pos값은 커지는데 slave가 따라가지 못함) 결국 replication이 깨지게 됩니다.

 

그럼 언제 replication이 깨질까? slave에서 replication 작업을 하므로 slave에 error가 생길 시 replication이 깨질 것입니다. error의 원인은 다양합니다만, 제가 겪었었던 slave query 에러인 경우(error 1062)로 설명하겠습니다. 발생하는 원인은 아직 파악하지 못했습니다. 알고 계신 분은 댓글 부탁드려요 :)

 


아래 과정으로 replication 깨진 것을 복구하였습니다.

 

master DB에서 수행

SHOW MASTER STATUS;

 

slave DB에서 수행

SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

STOP SLAVE;

CHANGE MASTER TO \
MASTER_LOG_FILE='sunny-mn03-bin.000004', MASTER_LOG_POS=149868127;

START SLAVE;

 


 

만약 replication 깨짐 현상이 오래동안 지속되어서 위의 방법으로도 복구가 안된다면 master 데이터를 백업하여 slave에 적용하는 방법을 사용합니다.

 

master DB에서 수행

// mysqldump 작업하는 동안 변경작업(insert, delete 등)이 수행되지 않도록 READ LOCK을 걸어준다.
// select만 가능하다.
FLUSH TABLES WITH READ LOCK;

// log file, log pos 를 기록해둔다.
SHOW MASTER STATUS;

master DB 서버 터미널에서 수행

mysqldump -uroot -p[암호] --all-databases > /tmp/mysqldump_200116.sql
scp /tmp/mysqldump_200116.sql sunny-mn04.kipa.org:/tmp/

master DB에서 수행

UNLOCK TABLES;

 

slave DB에서 수행

SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

STOP SLAVE;

slave DB 서버 터미널에서 수행

mysql-uroot -p[암호] < /tmp/mysqldump_200116.sql

slave DB에서 수행

CHANGE MASTER TO \
MASTER_LOG_FILE='sunny-mn03-bin.000004', MASTER_LOG_POS=149868127;

START SLAVE;

 

 

skip slave error = ALL 주의점
replication 작업을 중단없이 실행할 수 있다.
replication 정합성이 맞지 않을 수 있다. (error를 skip하므로)

 

 

 


 

참고링크

장애 및 복구 시나리오

 

데이터 기술 동향 < 정보마당 - 한국데이터산업진흥원

MySQL 복구 인프라 구축 바이너리로그 서버를 활용한 복구 데이터베이스(DB) 운영에 있어 절대 실패하지 말아야 할 것이 ‘복구’다. 안정적이고 효율적인 백업/복구 인프라를 구축하는 것은 데이

www.kdata.or.kr

 

change master to 설명

 

:::MySQL Korea:::

13.6.2.1. CHANGE MASTER TO CHANGE MASTER TO master_def [, master_def] ... master_def:    MASTER_HOST = 'host_name'  | MASTER_USER = 'user_name'  | MASTER_PASSWORD = 'password'  | MASTER_PORT = port_num  | MASTER_CONNECT_RETRY = count  | MASTER_LO

www.mysqlkorea.com

 

full backup본으로 복구 + binary log 기반으로 복구하는 방법

 

장애와 관련된 XtraBackup 적용기 - 우아한형제들 기술 블로그

안녕하세요. 우아한형제들에서 빌링시스템을 개발하고 있는 이주현입니다.

woowabros.github.io

 

replication 재설정

 

MySQL Replication 재설정

mysql 2중화를 위해 흔히 사용하는 replication중에 싱크를 다시 설정해야 할때가 있습니다. 보통은 서버를...

blog.naver.com

 

 

 

반응형

댓글