Skip to content

PHP Binlog Collector based on MySQL/MariaDB Replication Library

License

Notifications You must be signed in to change notification settings

ridi/php-binlog-collector

Repository files navigation

php-binlog-collector

Build Status Latest Stable Version License

PHP로 만들어진 MySQL/MariaDB 복제 프로토콜 라이브러리를 이용한, MariaDB Binlog 기반의 변경사항 수집 응용 어플리케이션으로 분석 범위를 분할하는 Partitioner와 실제 변경사항 데이터를 수집하는 Worker로 구성되어 있습니다.

주요 사용 라이브러리: php-mysql-replication

Installation

  1. Composer 사용
composer require ridibooks/php-binlog-collector
  1. 직접 Github 사용
git clone https://github.com/ridi/php-binlog-collector.git
composer install -o

MariaDB 사용 제약

php-mysql-replication 와 동일합니다.

TARGET_DB는 binlog-format: row 로 설정되어 운영중이여야 합니다.

TARGET_DB 접근 권한은 REPLICATION SLAVE, REPLICATION CLIENT, SELECT 가 필요합니다.

DB 연결 설정

.env.local는 아래와 같습니다.

BINLOG_MYSQL_TARGET는 분석할 DB, BINLOG_MYSQL_HISTORY_WRITE는 분석 위치 및 이력 데이터를 저장할 DB 입니다.

BINLOG_ENABLE_SENTRY=0
BINLOG_SENTRY_KEY= 
BINLOG_MYSQL_TARGET_HOST=127.0.0.1
BINLOG_MYSQL_TARGET_USER=repl
BINLOG_MYSQL_TARGET_PORT=3307
BINLOG_MYSQL_TARGET_PASSWORD=1234
BINLOG_MYSQL_TARGET_DBNAME=php_mysql_replication
BINLOG_MYSQL_TARGET_DRIVER=pdo_mysql
BINLOG_MYSQL_TARGET_CHARSET=utf8

BINLOG_MYSQL_HISTORY_WRITE_HOST=127.0.0.1
BINLOG_MYSQL_HISTORY_WRITE_USER=testUser
BINLOG_MYSQL_HISTORY_WRITE_PORT=3308
BINLOG_MYSQL_HISTORY_WRITE_PASSWORD=testUser
BINLOG_MYSQL_HISTORY_WRITE_DBNAME=platform
BINLOG_MYSQL_HISTORY_WRITE_DRIVER=pdo_mysql
BINLOG_MYSQL_HISTORY_WRITE_CHARSET=utf8

해당 설정 정보는 demo에 docker 기반 환경에 들어 있는 기본 연결 정보입니다.

만약 .env 파일이 있으면 해당 파일로 교체됩니다.

Partitioner/Worker 설정

default 설정정보이며, 외부에서 설정을 변경할 수 있습니다.

설정 정보 디폴트 값 사용 설명
gtid_partition_max_count 1000 Partitioner 파티션 최대 개수
jump_offset_for_next_partition 10000 Partitioner 파티션을 나누기 위한 값
tables_only X Worker 타겟 테이블명들
databases_only X Worker 타겟 데이터베이스명들
child_process_max_count 10 Worker 동시에 실행할 워커 수
once_processed_max_event_count_in_gtid 100 Worker 한 트랜잭션에 한 번에 저장할 이벤트 수
gtid_count_for_persist_per_partition 500 Worker 분석시 위치 갱신을 위한 Gtid 갯수
is_all_print_event false ALL 디버깅 사용여부

Partitioner/Worker 실행

  1. Binlog Collector Partitioner에서 최초에 분석을 시작할 위치를 입력하여 분석할 범위를 나눕니다.
php [every]binlog_collect_partitioner.php change_pos [binLogFileName] [binLogPosition]
    'ex) php [every]binlog_collect_partitioner.php change_pos mariadb-bin.000003 36755'
  1. 이미 분석을 시작했다면, 아래 명령어로 DB에 저장된 위치로부터 계속 분석 범위를 나눕니다.
php [every]binlog_collect_partitioner.php continue
  1. Partitioner가 나눈 범위에 대해서 Binlog Collector Worker가 병렬적으로 처리합니다.
php [every]binlog_collector_worker.php

데모

모든 데모들은 demo directory 에서 이용할 수 있고, docker 기반의 mariadb 환경 및 실제 구동은 travis-ci를 통해서 테스트 해볼 수 있습니다. MariaDB Binlog을 이용한 변경사항 추적 에서 설계 내용을 확인 할 수 있습니다.