제안 # 1 : 분배 마스터 사용
Distribution Master는 log-bin이 활성화되고 log-slave-updates가 활성화 된 mysql 슬레이브이며 BLACKHOLE Storage Engine 이있는 테이블 만 포함합니다 . 복제 마스터에 replicate-do-db를 적용하고 배포 마스터에서 이진 로그를 생성하여 이진 로그를 생성하려는 DB 스키마 만 포함 할 수 있습니다. 이런 식으로 배포 마스터에서 나가는 binlog의 크기를 줄입니다.
다음과 같이 배포 마스터를 설정할 수 있습니다.
- mysqldump --no-data 옵션을 사용하여 스키마 전용 덤프를 생성하여 데이터베이스를 덤프하십시오.
- 스키마 전용 덤프를 배포 마스터에로드하십시오.
- Distribution Master의 모든 테이블을 BLACKHOLE 스토리지 엔진으로 변환하십시오.
- 실제 데이터가있는 마스터에서 배포 마스터로 복제를 설정합니다.
- Distribution Master의 /etc/my.cnf에 replicate-do-db 옵션을 추가하십시오.
2 단계와 3 단계의 경우 스키마 전용 덤프를 편집하고 ENGINE = MyISAM 및 ENGINE = InnoDB를 ENGINE = BLACKHOLE로 바꾼 다음 편집 된 스키마 전용 덤프를 배포 마스터에로드 할 수 있습니다.
3 단계에서만 배포 마스터에서 모든 MyISAM 및 InnoDB 테이블을 BLACKHOLE로 변환하는 스크립트를 작성하려면 다음 쿼리를 실행하여 텍스트 파일로 출력하십시오.
mysql -h... -u... -p... -A --skip-column-names -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name', ENGINE=BLACKHOLE;') BlackholeConversion FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','mysql') AND engine <> 'BLACKHOLE'" > BlackholeMaker.sql
테이블을 BLACKHOLE 스토리지 엔진으로 변환하는 스크립트를 추가하면 MEMORY 스토리지 엔진 테이블도 변환됩니다. MEMORY 스토리지 엔진 테이블은 데이터 스토리지를위한 디스크 공간을 차지하지 않지만 메모리를 차지합니다. MEMORY 테이블을 BLACKHOLE로 변환하면 Distribution Master의 메모리가 깔끔하게 유지됩니다.
DDL을 배포 마스터로 보내지 않는 한 클라이언트가 원하는 DB 정보 만 복제하도록하기 전에 원하는 DML (INSERT, UPDATE, DELETE)을 전송할 수 있습니다.
이미 다른 StackExchange 사이트에 배포 마스터 사용에 대한 게시물을 작성했습니다 .
제안 # 2 : 작은 이진 로그 및 릴레이 로그 사용
max_binlog_size 를 엄청나게 작은 것으로 설정하면 binlog 를 수집하여 더 작은 청크로 나갈 수 있습니다. 릴레이 로그의 크기를 설정하는 별도의 옵션 인 max_relay_log_size도 있습니다. max_relay_log_size = 0이면 기본적으로 max_binlog_size가 설정된 값으로 설정됩니다.
제안 # 3 : 반 동기식 복제 사용 (MySQL 5.5 만 해당)
기본 데이터베이스와 여러 배포 마스터를 MySQL 5.5로 설정하십시오. 기본 데이터베이스가 binlog를 신속하게 배포 마스터에 제공 할 수 있도록 Semisynchronous Replication을 활성화하십시오. 모든 슬레이브가 배포 마스터 인 경우 반 동기식 복제 또는 MySQL 5.5가 필요하지 않을 수 있습니다. Distribution Masters 이외의 슬레이브 중 하나에보고, 고 가용성, 수동 대기 또는 백업 목적으로 실제 데이터가있는 경우 Semisynchronous Replication과 함께 MySQL 5.5를 사용하십시오.
제안 # 4 : 행 기반 NOT 문 기반 이진 로깅 사용
SQL 문이 테이블에서 여러 행을 업데이트하는 경우 SBBL (Statement-Based Binary Logging)은 SQL 문만 저장합니다. RBBL (Row-Based Binary Logging)을 사용하는 동일한 SQL 문은 각 행의 행 변경 사항을 실제로 기록합니다. 따라서 SQL 문을 전송하면 RBBL을 통해 SBBL을 수행하는 이진 로그의 공간이 절약됩니다.
또 다른 문제점은 테이블 이름에 데이터베이스가 추가 된 replicate-do-db와 함께 RBBL을 사용하는 것입니다 . 슬레이브, 특히 배포 마스터에는 적합하지 않습니다. 따라서 모든 DML에 데이터베이스와 테이블 이름 앞에 마침표가 없는지 확인하십시오.