안녕하세요. 코미야입니다.
이것은 이전에 나온 오류의 기록입니다.
・오류 기록
>노예 상태 표시\G
Last_Error: 쿼리 시 키 'PRIMARY'에 대한 '1133523-2013-08-18 05:03:01' 항목 중복 발생. 기본 데이터베이스: '*****'. 쿼리: 'event_****_logs'에 삽입 ...
시간이 기본 키이기 때문에 중복된 오류처럼 느껴집니다.
로그와 세션은 복제하기 쉽다고 생각합니다.
혹시 몰라서 mysqldump 옵션을 봤는데,
--skip-opt는 포함되지 않으므로, --add-drop-table이 opt가 임의로 결정될 수 있도록 유효해야 합니다.
MYDUMP_PAR='--단일 트랜잭션 --dump-slave=2 --루틴 --include-master-host-port --all-databases'
http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html
데이터 입력 후 슬레이브를 초기화하고 로그 파일과 위치에 따라 슬레이브를 시작하는 절차에는 문제가 없어 보였습니다.
중복 입력을 모두 건너뛰어도 되는지 고객에게 확인해 달라고 요청했을 때,
Insert가 주요 키를 커버하는 것이 괜찮은지는 개발 측에서 별도로 확인될 예정이며, 당분간은 건너뛰는 이야기입니다.
(목표가 서비스에 사용되기를 원하지 않아 복원이 우선순위였던 것 같습니다.) 불일치가 걱정된다면, 마스터에서 덤프를 다시 가져오는 것이 더 낫습니다. )
・오류 쿼리 건너뛰는 방법
만약 하나뿐이라면,
전역 SQL_SLAVE_SKIP_COUNTER = 1을 설정;
하지만 만약 그것이 가득 들어온다면
마지막 _SQL_Errno: 1062
이 오류 번호를 지정하고 건너뛰세요. 즉, 중복된 항목은 모두 건너뛸 수 있습니다.
perconatoolkit이 포함되어 있다면
pt-slave-restart -u root -p'cat /root/.mysql_pwd' --error-numbers 1062 --verbose
표준 출력으로 나오기 때문에, 리디렉션하면 나중에 건너뛴 쿼리를 볼 수 있습니다.
포함되지 않았다면,
my.cnf에 다음과 같이 작성하는 방법도 있습니다. (mysqld 재시작 필요)
슬레이브-스킵-오류=1062
http://fr.slideshare.net/billkarwin/percona-toolkit
http://jitsu102.hatenablog.com/entry/2012/03/08/073448
로그나 세션 같은 데이터가 다른 프로젝트에서 중복된 사례도 있었습니다.
덤프를 다시 찍고 싶다면, 업데이트를 받지 않도록 잠그고 몇 초 기다린 후 위치를 확인한 후 사진을 찍는 것이 좋습니다.
InnoDB에서 --single-transaction을 사용해도 중복이 있을 수 있는 것 같습니다.
생각해봤지만, 이 사건의 전부를 알게 되어 기록도 남기겠습니다.
사실, 이진 로그 파일과 위치에 대한 덤프 데이터 내용 대신,
잠금을 한 후, 나는 손으로 마스터 상태를 보여주었어; 그 후에 나는 똥을 싸고 있었어,
약 11개의 쿼리에 대한 덤프 데이터가 미묘하게 업데이트된 것이었고, 그래서 중복된 것이었습니다! 그게 바로 그거였어요.
head -30 dumpdata나 zcat dumpdata.gz|head -30은 쓸모가 없어 보입니다.
---masta-data 덤프를 한다면 잘 살펴보세요.
*-masta-data를 추가하면 CHANGE MASTER 문이 덤프 데이터 시작 부분에 기록됩니다.
1이면 실행되고, 2이면 주석이 됩니다. 데이터가 재배치될 때는 2로 설정되어 이전 마스터로 가지 못하게 했습니다.
위 내용을 시청해 주셔서 감사합니다.