php-binlog-collector
, (*1)
PHP๋ก ๋ง๋ค์ด์ง MySQL/MariaDB ๋ณต์ ํ๋กํ ์ฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ, MariaDB Binlog ๊ธฐ๋ฐ์ ๋ณ๊ฒฝ์ฌํญ ์์ง ์์ฉ ์ดํ๋ฆฌ์ผ์ด์
์ผ๋ก ๋ถ์ ๋ฒ์๋ฅผ ๋ถํ ํ๋ Partitioner์ ์ค์ ๋ณ๊ฒฝ์ฌํญ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ Worker๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค., (*2)
์ฃผ์ ์ฌ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ: php-mysql-replication, (*3)
Installation
- Composer ์ฌ์ฉ
composer require ridibooks/php-binlog-collector
- ์ง์ Github ์ฌ์ฉ
git clone https://github.com/ridi/php-binlog-collector.git
composer install -o
MariaDB ์ฌ์ฉ ์ ์ฝ
php-mysql-replication ์ ๋์ผํฉ๋๋ค., (*4)
TARGET_DB๋ binlog-format: row ๋ก ์ค์ ๋์ด ์ด์์ค์ด์ฌ์ผ ํฉ๋๋ค., (*5)
TARGET_DB ์ ๊ทผ ๊ถํ์ REPLICATION SLAVE, REPLICATION CLIENT, SELECT ๊ฐ ํ์ํฉ๋๋ค., (*6)
DB ์ฐ๊ฒฐ ์ค์
.env.local๋ ์๋์ ๊ฐ์ต๋๋ค., (*7)
BINLOG_MYSQL_TARGET๋ ๋ถ์ํ DB, BINLOG_MYSQL_HISTORY_WRITE๋ ๋ถ์ ์์น ๋ฐ ์ด๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ DB ์
๋๋ค., (*8)
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 ๊ธฐ๋ฐ ํ๊ฒฝ์ ๋ค์ด ์๋ ๊ธฐ๋ณธ ์ฐ๊ฒฐ ์ ๋ณด์
๋๋ค., (*9)
๋ง์ฝ .env ํ์ผ์ด ์์ผ๋ฉด ํด๋น ํ์ผ๋ก ๊ต์ฒด๋ฉ๋๋ค., (*10)
Partitioner/Worker ์ค์
default ์ค์ ์ ๋ณด์ด๋ฉฐ, ์ธ๋ถ์์ ์ค์ ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค., (*11)
| ์ค์ ์ ๋ณด |
๋ํดํธ ๊ฐ |
์ฌ์ฉ |
์ค๋ช
|
| 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 ์คํ
- 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'
- ์ด๋ฏธ ๋ถ์์ ์์ํ๋ค๋ฉด, ์๋ ๋ช
๋ น์ด๋ก DB์ ์ ์ฅ๋ ์์น๋ก๋ถํฐ ๊ณ์ ๋ถ์ ๋ฒ์๋ฅผ ๋๋๋๋ค.
php [every]binlog_collect_partitioner.php continue
- Partitioner๊ฐ ๋๋ ๋ฒ์์ ๋ํด์ Binlog Collector Worker๊ฐ ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
php [every]binlog_collector_worker.php
๋ฐ๋ชจ
๋ชจ๋ ๋ฐ๋ชจ๋ค์ demo directory ์์ ์ด์ฉํ ์ ์๊ณ , docker ๊ธฐ๋ฐ์ mariadb ํ๊ฒฝ ๋ฐ ์ค์ ๊ตฌ๋์ travis-ci๋ฅผ ํตํด์ ํ
์คํธ ํด๋ณผ ์ ์์ต๋๋ค.
MariaDB Binlog์ ์ด์ฉํ ๋ณ๊ฒฝ์ฌํญ ์ถ์ ์์ ์ค๊ณ ๋ด์ฉ์ ํ์ธ ํ ์ ์์ต๋๋ค., (*12)