[MySQL] Replication 깨짐 복구

1. Replication 상태 확인

show slave status
----
Slave_IO_Running Yes
Slave_SQL_Running No

2. Replication 에러 사례

  • Error 'Unknown or incorrect time zone: 'Asia/Seoul'' on query. Default database: '*****'.
  • Column 6 of table '*****' cannot be converted from type 'varchar(120)' to type 'varchar(14)’

DB의 timezone 값이 Master와 같지 않거나 기존 데이터 타입에서 차이가 있었을 경우 등, Replica 에서 쿼리 수행 실패가 발생하면 에러를 skip 하고 수동으로 Master와 맞춰준 후 Replication을 재개하여 조치할 수 있다.

3. Replica의 에러 무시하고 동기화 진행 설정하는 방법

Replica 노드에서 실행

stop slave;
set global sql_slave_skip_counter=1;
#에러 원인 구문 수동 실행 후
start slave;

4. Replication 재설정하는 방법

  1. scp로 Replica 노드에 dump 파일 이동
  2. binlog_position 확인
    a. Dump 파일의 MASTER_LOG_POS 확인
     cat test.dump | grep 'CHANGE MASTER'
     ## 결과
     -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000877', MASTER_LOG_POS=272970008;
    b. binlog 파일의 MASTER_LOG_POS 바로 다음 값 확인
     ## 확인한 binlog 파일을 sql로 추출
     cd /var/lib/mysql/logs/bin
     mysqlbinlog --no-defaults mysql-bin.000743 > ./binlog_220908.sql
     ## 다음 포지션 값
     -- at 272970093
  3. STOP SLAVE
    STOP SLAVE;
  4. DROP DATABASE
    DROP DATABASE;
  5. DB RESTORE (백그라운드로 실행)
    nohup mysql -u'root' -p'' < /home/devops/test.dump &
  6. START SLAVE
    RESET SLAVE ALL;
    ## Master 정보 입력
    CHANGE MASTER TO
    MASTER_HOST='x.x.x.x',
    MASTER_USER='test-replica' , 
    MASTER_PASSWORD='xxxxxxxx',
    MASTER_PORT=3306,
    MASTER_LOG_FILE='mysql-bin.000877',
    MASTER_LOG_POS=272970093
    ## 시작
    START SLAVE;
    ## 확인
    SHOW SLAVE STATUS;

'DB > MySQL' 카테고리의 다른 글

[MySQL] Replication  (0) 2020.11.15