MySQL 복제 관련 정보 요약
안녕하세요. 코미야입니다.
요즘은 자주 mysql에 대해 질문을 받아서
이 글은 사람들이 주로 묻는 내용을 설명하는 링크를 모아 요청 시 복사 및 붙여넣기 쉽게 하려는 시도입니다.
이 글을 읽는 것만으로는 많은 것을 알기 어렵다는 점을 유의해 주세요.
(완전히 잊어버릴 때 유용해 보인다.) )
‧기본
현장 지향 복제 상세 컴퓨터 경로: MySQL 복제 예술 안전하게 사용할 수 있는 10가지 기법.
이진 로그에 기록된 것은 업데이트 쿼리입니다.
참고로, I/O 오류는 물리적 디스크 파손, 네트워크 장애, 잘못된 복제 사용자 ID와 비밀번호, 중복 서버 등이 될 수 있습니다_id
이런 일이 발생할 수 있는 이유는 다음과 같습니다. SQL 오류의 주요 원인은 위의 첫 번째 링크에서 언급되어 있지만, 저는 주로 중복된 오류가 발생하는 것으로 보입니다.
참고로, 현재 복제 관련 설정은 대략 이렇습니다.
[shell]## 복제 (master/slave) log-bin=mysql-bin log-bin-index=mysql-bin.index binlog_format=mixed server-id = 133 relay-log=mysqld-relay-bin relay-log-index=mysql-relay-bin.index log_slave_updates=1 replicate-ignore-db=mysql,information_schema,performance_schema binlog-ignore-db=mysql,information_schema,performance_schema skip_slave_start read_only slave_net_timeout=120
## 복제 (5.6용) gtid-mode = OFF enforce_gtid_consistency=false master-info-repository=TABLE relay-log-info-repository=TABLE relay_log_recovery=ON #sync-master-info=1 slave-parallel-workers=0 binlog-checksum=CRC32 #master-verify-checksum=1 #slave-sql-verify-checksum=1 binlog-rows-query-log_events=1 #log_bin_use_v1_row_events=ON #sync_binlog=1 report-port=3306 report-host = 192.168.1.133[/shell]
마스터와 슬레이브는 HA이고, 역할이 바뀔 가능성도 있습니다.
로그_slave_updates와 다른 두 매개변수(서버_id와 report-host를 제외하고)는 동일한 사양을 가지고 있습니다.
복제는 관련이 없지만, 제가 일부 매개변수를 게시했으니 언급하겠습니다.
디스크가 여러 개 있다면, 시스템 영역과 데이터 영역을 나누어 I/O 부하를 분산시킬 수 있습니다.
만약 AWS라면, 임시 디스크를 TMPDIR로 지정하는 것이 좋을 것 같습니다.
·특정 DB와 테이블의 복제 여부
MySQL :: MySQL 5.1 참고 매뉴얼 :: 5.5.6 서버 복제 규칙 평가
이 기능들은 온라인에서 변경할 수 없는 것 같아요(5.7 버전부터는 바꿀 수 있을 것 같아요).
・중계 기록의 사양에 대하여
MySQL :: MySQL 5.1 참고 매뉴얼 :: 5.5.5.1 슬레이브 릴레이 로그 학습 MySQL 릴레이 로그 사양 - OpenGroove
MHA를 확인할 때 중계 로그를 남겨야 해서 찾아봤습니다.
·지연 대응책
한나라의 컴퓨터 경로: MySQL 복제 지연 추세와 대응책 ALTER로 해결된 MySQL 복제 지연 - 타카미_hiroki의 일기
사실 Created_tmp_disk_tables가 늘어났고 디스크에 임시 테이블이 만들어져 지연된 것입니다.
문제를 해결하기 위해 tmp_table_size과 max_heap_table_size을 늘려야 할 때도 있었습니다.
·일부러 지연
mk-slave-delay를 사용해 개발 환경에서 slaveDB를 의도적으로 3초 지연시키기 daemontools shell MySQL 복제 지연을 로컬에서 재현하는 절차 Part 2 - CFlat Inc.의 Tomorrow Style 블로그 MySQL :: MySQL 5.6 참고 매뉴얼 :: 16.3.9 지연 복제
*5.6에서 마스터로 변경_DELAY = N; OK. 5.5 이전에는 pt-slave-delay가 필요합니다.
중복 오류
MySQL 복제 1062 오류 문제 해결 - OpenGroove: MySQL 슬레이브에 중복 항목 오류가 발생했을 때 어떻게 해야 하나요 | DEVLAB
만약 너무 겹치는 것 같다면, 마스터에서 덤프해서 슬레이브에 불러와서 농도에 맞추는 게 더 나을 수 있습니다.
·무결성 검사
pt-table-checksum — Percona Toolkit 문서화
[OSS 참조: [MySQL]Maatkit을 이용한 복제 무결성] (http://infraref.blogspot.jp/2011/02/mysqlmaatkit.html)
저는 사용해본 적은 없지만, 이런 식으로 뭔가 있는 것 같아요.
- GTID 5.6 엔진
MySQL 5.6에 대해 조금 - MySQL-5.6.5의 새로운 기능 "GTID" 사용 시 주의해야 할 함정 - 복제 구성에 Y-Ken Studio 글로벌 트랜잭션 ID 사용 시 제한- hiroi10의 일기
참고로, GTID가 활성화되고 s-in된 환경은 본 적이 없습니다. (2014년 4월 기준)
·5.6 복제 전반
Yakst - MySQL 5.6에서 슬레이브를 크래시 방지하는 방법 MySQL 5.6 개선 (3부) - 인기 복제 추가 개선 | IT 데일리 메모랜덤: 슬레이브가 소문으로 소문난 것 같_parallel_workers
5.5 및 5.6 복제
일일 메모: MySQL 5.5(및 그 이전) 슬레이브를 MySQL 5.6 마스터에 걸어두면 짜증이 납니다 MySQL-5.5/5.6 복제 사용자에게 "RESET SLAVE"에 관한 무서운 이야기를 전하세요 - Y-Ken Studio Hatebro 지점 일일 메모: MySQL 5.6과 MySQL 5.0 복제에 I/O 스레드가 있습니다 오류: 2049
・세미 싱크
한의 컴퓨터 길: 가장 강력한 MySQL HA 방법 - 반동기식 복제MySQL 5.5 GA 버전이 출시되었기에, 저는 반동기식 복제를 사용해 보았습니다 - 미래학자로서... MySQL 반동기식 복제. 마법을 보세요. 마법을 시도해 보세요. « 로넨 바람
SSL 연결
suz-lab - 블로그: MySQL 간 SSL 연결 suz-lab - 블로그: SSL 연결을 통한 MySQL 복제
참고로, SSL을 원한다는 얘기는 별로 듣지 못합니다. 마치 데이터를 부분적으로 동기화하고 분석하고 싶다는 것과 비슷할 수도 있습니다.
우선, DB가 프론트 세그와 접촉하는 경우는 드물고, 전역이 아니라 VPN을 통해 연결된 것으로 인식되는 경우가 흔하다고 생각합니다.
・명예의 전당 N:1 멤버 (저도 직접 하고 싶진 않지만, 이런 사람들이 있어요)
마스터 앤 스네이브 대 슬레이브 1 복제 만드는 방법 - 어떻게 해야 하나요_aki
데이터디어, 포트, 로그 파일 이름을 바꿔야겠어요. 즉, 같은 인스턴스에서 n:1을 정상적으로 할 수 없다는 뜻입니다.
MySQL 5.7에서 다중 소스 복제가 가능할 수 있다는 얘기를 들었지만, 아직 개발 중이라 확실하지는 않습니다.
・다단계 복제 구성
우리는 다단계 장애에 대응할 수 없습니다. 이는 중간 노드 장애에 대응하는 것이 더 복잡해지기 때문입니다.
분석 중에 사라지거나 영업 시간 중에 복원되더라도 괜찮은 손자 노예를 생성하세요.
그렇다면 허용될 만하다고 생각합니다. 정지된 상태에서 서비스 정지와 직접적으로 연관되어 있다면 불가능하다고 생각합니다.
만약 지금 회사에 그런 구조가 있다면, 왜 그렇게 구조화되었는지 자세히 조사해야겠네요.
슬레이브 수가 너무 많이 늘어나고 마스터 CPU나 NIC 대역폭이 부족하면 다른 방법이 없습니다
하지만 다행히도, 지금까지 그런 환경을 본 적이 없습니다.
이렇게 보면, 복제만으로도 놀라울 정도로 유익합니다.
다음은 복제 자체가 아닌 정보이지만, 게시하겠습니다.
・MHA
MySQL용 MHA 및 DeNA 오픈 소스 스토리 mysql-master-ha - MySQL용 MHA: MySQL용 마스터 고가용성 관리자 및 도구 - 구글 프로젝트 호스팅MySQL-MHA - DRY (일본과 미국에서 일하는 엔지니어의 일기) MySQL-MHA를 사용해 자동 MySQL 장애 조치 - FAT47 기반 인프라 분량 mysql-mha를 추가하려고 시도했습니다! 2부MHA, Murakumo & MeMHA(마스터하이 서비스 관리자) 배포 설정 | DEVLABMHA 운영 검증 및 전환 검증 | 데브랩
‧MySQL 페이얼오버
mysqlfailover --exec-before and --exec-after - hiroi10의 일기 저는 데몬이 된 후 mysqlfailover를 시도해 봤습니다 | DEVLAB
기타 HA
MySQL에서 마스터 또는 슬레이브 장애가 복제될 경우 복구 계획 - (h) MySQL HA 구성에 관한 메모
·제단 테이블
한의 컴퓨터 경로: ALTER TABLE을 잘 마스터해봅시다. MySQL에서 열과 인덱스를 추가하거나 삭제할 때 열과 인덱스를 잠그는 것에 대해 이야기합니다 - (゚∀゚)o sasata299의 블로그MySQL에서 ALTER TABLE 문장 진행 상황 확인 - SH2의 일기, ALTER TABLE에서 ALTER TABLE에서 인덱스를 만들 때 | DEVLAB
·예비
MySQL과 MyISAM이 혼합된 환경에서의 백업에 관한 노트 | DEVLAB GTID를 사용하는 환경에서 mysqldump - hiroi10의 일기
5.6 이전 버전으로 가져오거나, 원격 5.5 서버에서 mysqldump를 사용해 덤프하고 싶을 경우, mysqldump에 --set-gtid-purged=OFF를 추가해야 합니다
GTID가 유효하다면, mysqldump에 --triggers --routines --events 추가하지 않으면 오류가 발생합니다
mysqldump --순서별 옵션 - SH2 다이어리 MySQL 백업 작업
‧차이가 있었어
pt-table-sync로 mysql에서 마스터와 슬레이브 diff를 흡수하기 - Qiita
파라미터 튜닝
5.6 유사 조항
MySQL 5.6 파라미터 리뷰 - SH2 일일 메모랜덤: MySQL 5.6의 새로운 암묵적 기본값 InnoDB 성능 튜닝 및 신규 기능 - ORACLEMySQL 5.6 파라미터 리뷰 세션 (슬라이드) Yakst - (뒤로) InnoDB 성능 최적화 기초 MySQL 미지의 옵션 오류는 loose 옵션을 접두사로 피할 수 있습니다 - - Kamipowaru
[[D14] MySQL 5.6 시대 성능 튜닝 *db 기술 쇼케이스 2013 도쿄] (http://www.slideshare.net/yoyamasaki/20131110-tuning-onmysql56)
MySQL 5.1→5.6 my.cnf diff - (h) 노트
그 외에는
MySQL 튜닝(병목 현상 감지): 찾아보세요! - 드레콤 엔지니어 블로그 MySQL 튜닝 DSAS 개발자실: 5분 만에 MySQL 메모리 관련 튜닝! MySQL 스터디 노트(서버 구성 항목) | 키누로구
누마 관련
【참고】MySQL 및 NUMA 아키텍처에서의 스왑 발생 - FAT47 기반 인프라 분 MySQL InnoDB 스토리지 엔진 튜닝 (2부) (goo News ×EnterpriseZine) - goo News MySQL 및 NUMA 아키텍처 및 Swap Insanity | COLOPL 엔지니어 블로그 혁명의 날! numactl 사용 방법
이노탑 참조
일일 메모: innotop은 innotop으로 그룹 내에서 MySQL 상태를 상위 스타일로 표시하는 데 매우 유용합니다. - Mikeda의 일기 MySQL - innotop 팁 - Qiitainnotop - MySQL의 강력한 "최상" 클론 - Google 프로젝트 호스팅
・5.6 정보
2부 MySQL 5.6 - 추가 기능 및 NoSQL | Think IT MySQL 5.6의 향상 (1부) - 성능 및 사용성 대폭 향상 | Think ITMySQL 5.6 신규 기능 Explanation@dbtechshowcase2012MySQL 5.6의 새로운 기능을 확인해 보세요! | Allied Architects 엔지니어 블로그 이전 MySQL 5.6에서 문제가 되지 않았던 SQL 문이 오류가 될 경우 어떻게 해야 하는지 - oranie Diary MySQL 5.6에서 InnoDB memcached 플러그인을 사용해 보세요 - 사케 다이어리 하테나 지분 MySQL 5.6 관련 정보 요약
‧문제의 기억
mysql HA 문제의 추억 - smallpalace 블로그
블루 스프링에 대해 많이 기억하고 싶지 않아요.
・RDS
NHN 기술 컨퍼런스에서 본 DeNA의 MySQL 운영과 Amazon RDS의 비교. « DebianCDNEC2 - 온프레미스 환경에서 MySQL에서 RDS를 마이그레이션하기 - Amazon RDS에서 MySQL 매개변수 변경 - OpenGroove Amazon RDS (MySQL)에서 타임존 변경 | Developers.IO복제를 이용해 Amazon RDS MySQL 5.6 데이터를 내보내기 - Amazon 관계형 데이터베이스 서비스CDP: 읽기 복제 패턴 - AWS-CloudDesignPattern
제가 RDS에서 좋아하는 점은 시점 복구를 브라우저에서 할 수 있다는 것입니다.
제가 싫어하는 점은 F/O 중단 시간이 좋지 않고, 5.6.13 이후로는 슬레이브를 밖에 두는 것이 가능하다는 점입니다.
・셰프 레시피 (방금 봤고 직접 먹어보진 않았어요)
Chef mysql 마스터/슬레이브 레시피
・참고서
"실용 고성능 MySQL 3판"
[MySQL[운영+관리] 전문가용 문제 해결 가이드] (http://www.amazon.co.jp/exec/obidos/ASIN/4774142948)
"현장에서 사용하는 MySQL" "MySQL 사전 (데스크톱 참고문헌)"
당분간은 여기 두겠습니다.
생각나는 게 있으면 추가할 수도 있어요. 추천할 만한 게 있으면 알려주세요.
읽어주셔서 정말 감사합니다.