<?php 
 
declare(strict_types=1); 
 
error_reporting(E_ALL); 
date_default_timezone_set('UTC'); 
include __DIR__ . '/../vendor/autoload.php'; 
 
use Monolog\Handler\StreamHandler; 
use Monolog\Logger; 
use MySQLReplication\Config\ConfigBuilder; 
use MySQLReplication\Definitions\ConstEventType; 
use MySQLReplication\Event\DTO\EventDTO; 
use MySQLReplication\Event\EventSubscribers; 
use MySQLReplication\MySQLReplicationFactory; 
 
/** 
 * Your db configuration 
 * @see ConfigBuilder 
 * @link https://github.com/krowinski/php-mysql-replication/blob/master/README.md 
 */ 
$binLogStream = new MySQLReplicationFactory( 
    (new ConfigBuilder()) 
        ->withUser('root') 
        ->withHost('0.0.0.0') 
        ->withPassword('root') 
        ->withPort(3306) 
        ->withHeartbeatPeriod(60) 
        ->withEventsIgnore([ConstEventType::HEARTBEAT_LOG_EVENT->value]) 
        ->build(), 
    logger: new Logger('replicator', [new StreamHandler(STDOUT)]) 
); 
 
/** 
 * Register your events handler 
 * @see EventSubscribers 
 */ 
$binLogStream->registerSubscriber( 
    new class() extends EventSubscribers { 
        public function allEvents(EventDTO $event): void 
        { 
            // all events got __toString() implementation 
            #echo $event; 
 
            // all events got JsonSerializable implementation 
            echo json_encode($event, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT); 
 
            echo 'Memory usage ' . round(memory_get_usage() / 1048576, 2) . ' MB' . PHP_EOL; 
        } 
    } 
); 
 
// start consuming events 
$binLogStream->run(); 
 
 |