ridibooks / php-binlog-collector
Ridibooks PHP Binlog Collector
1.4.0
2020-04-21 06:22 UTC
Requires
- illuminate/support: ^5.4
- krowinski/php-mysql-replication: 6.2.2
- monolog/monolog: ^1.18.0
- ridibooks/platform-gnfdb: ^0.1
- sentry/sentry: ^1.5
- vlucas/phpdotenv: ^2.4
Requires (Dev)
- phpunit/phpunit: ^7.0
README
该应用是一个使用MySQL/MariaDB复制协议库编写的应用,基于MariaDB Binlog进行更改数据收集,由用于分割分析范围的Partitioner和用于收集实际更改数据的Worker组成。
主要使用库: php-mysql-replication
安装
- 使用Composer
composer require ridibooks/php-binlog-collector
- 直接使用GitHub
git clone https://github.com/ridi/php-binlog-collector.git composer install -o
MariaDB使用限制
TARGET_DB需要设置为binlog-format: row
才能运行。
TARGET_DB需要具有REPLICATION SLAVE, REPLICATION CLIENT, SELECT
权限。
数据库连接设置
.env.local文件如下。
BINLOG_MYSQL_TARGET是分析数据库,BINLOG_MYSQL_HISTORY_WRITE是存储分析位置和历史数据的数据库。
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设置
默认设置信息,外部可以修改设置。
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'
- 如果已经开始了分析,可以使用以下命令从已存储的位置继续分割分析范围。
php [every]binlog_collect_partitioner.php continue
- Binlog Collector Worker会并行处理Partitioner分割的范围。
php [every]binlog_collector_worker.php
演示
所有演示都可以在demo目录中找到,可以使用基于docker的mariadb环境,并通过travis-ci进行实际运行测试。使用MariaDB Binlog进行更改跟踪中可以查看设计内容。