일상 기록 창고

리플리케이션 오류시 특정 부분 건너 뛰기 본문

프로그래밍/mysql

리플리케이션 오류시 특정 부분 건너 뛰기

Crazy_Kong 2009. 5. 26. 02:24

아아아악 ;; 디비까지 만져야 하다니 아아아악 ;;;;;

 

replication서비스를 진행하다가 보면
replication이 아래와 같은 이유등으로 오류가 날 경우가 있습니다.
이때의 데이터가 필요없는 부분이라면 그냥 건너뛰게 하면 되는데요
건너뛰게 하는 방법은 아래와 같습니다.

slave서버에서 멈춘 위치 확인(Exec_master_log_pos: 1033756136)
mysql> show slave status\G

master서버에서 멈춘 위치근처에 어떤 쿼리들이 있는지 확인
mysql> show binlog events in 'MASTERSERVER-bin.012' from 1033756136 limit 3\G

오류가 발생한 쿼리는 필요없으므로 다음 쿼리로 이동
mysql> slave stop;
mysql> change master to master_log_file='MASTERSERVER-bin.012', master_log_pos=1033756434;
mysql> slave start;
mysql> show slave status\G


---------------------상세한 내용--------------------------------------

mysql> show slave status\G
*************************** 1. row ***************************
Master_Host: 192.168.*.*
Master_User: userid
Master_Port: 1111
Connect_retry: 60
Master_Log_File: MASTERSERVER-bin.012
Read_Master_Log_Pos: 1049058337
Relay_Log_File: MEMOINFOS2-relay-bin.011
Relay_Log_Pos: 1033731265
Relay_Master_Log_File: MASTERSERVER-bin.012
Slave_IO_Running: No
Slave_SQL_Running: No
Replicate_do_db:
Replicate_ignore_db:
Last_errno: 1062
Last_error: Error 'Duplicate entry '18462' for key 1' on query 'INSERT INTO dbaaa.TBLEVENT_0818_RECEIVE (EVENTKEY, seq, USERID, SENDERseq, CREATEDATE, UPDATEDATE) VALUES (xxx, 111, '222@aaa.com', '4337665', NOW(), NOW())'. Default database: 'INFODB'
Skip_counter: 0
Exec_master_log_pos: 1033756136
Relay_log_space: 1049033466
1 row in set (0.00 sec)

master에서 Exec_master_log_pos에 나타난 숫자 뒤에 어떤 이벤트 로그가 있는지 확인

mysql> show binlog events in 'MASTERSERVER-bin.012' from 1033756136 limit 3\G
*************************** 1. row ***************************
Log_name: MASTERSERVER-bin.012
Pos: 1033756136
Event_type: Intvar
Server_id: 1
Orig_log_pos: 1033756136
Info: INSERT_ID=18462
*************************** 2. row ***************************
Log_name: MASTERSERVER-bin.012
Pos: 1033756164
Event_type: Query
Server_id: 1
Orig_log_pos: 1033756164
Info: use `INFODB`; INSERT INTO INFODB.TBLEVENT_0818_RECEIVE (EVENTKEY, seq, USERID, SENDERCMN, CREATEDATE, UPDATEDATE) VALUES (xxx, 111, '222@aaa.com', '4337665', NOW(), NOW())
*************************** 3. row ***************************
Log_name: MASTERSERVER-bin.012
Pos: 1033756434
Event_type: Query
Server_id: 1
Orig_log_pos: 1033756434
Info: use `INFODB`; UPDATE `dbaaa`.`aaa` SET `LOGOUTDATE` = NOW(), UPDATEDATE = NOW() WHERE `seq` = '1'
3 rows in set (0.00 sec)

slave stop;
change master to master_log_file='MASTERSERVER-bin.012', master_log_pos=1033756434;
slave start;
show slave status\G 

'프로그래밍 > mysql' 카테고리의 다른 글

localhost.localdomain.pid 오류..  (0) 2009.05.27
substring_index 활용  (0) 2009.05.26
@RNUM:=@RNUM+1  (0) 2009.05.19
문자열 합치기  (0) 2007.09.19
mysql 함수 모음..  (0) 2006.05.14