PHP Binlog Collector based on MySQL/MariaDB Replication Library
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
demo
src/Binlog/Collector
tests
.gitignore
.travis.yml
CHANGELOG.md
LICENSE
Makefile
README.md
composer.json
composer.lock

README.md

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는 아래와 같습니다.

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

ENABLE_SENTRY = false
SENTRY_KEY = 
TARGET_DB_HOST = 127.0.0.1
TARGET_DB_USER = repl
TARGET_DB_PORT = 3307
TARGET_DB_PASSWORD = 1234
TARGET_DB_DBNAME = php_mysql_replication
TARGET_DB_DRIVER = pdo_mysql
TARGET_DB_CHARSET = utf8

HISTORY_WRITE_DB_HOST = 127.0.0.1
HISTORY_WRITE_DB_USER = testUser
HISTORY_WRITE_DB_PORT = 3308
HISTORY_WRITE_DB_PASSWORD = testUser
HISTORY_WRITE_DB_DBNAME = platform
HISTORY_WRITE_DB_DRIVER = pdo_mysql
HISTORY_WRITE_DB_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을 이용한 변경사항 추적 에서 설계 내용을 확인 할 수 있습니다.