dankkomcg / mysql-sync

MySQL Database Synchronization Library
MIT License
0 stars 0 forks source link

MySQL Database Synchronization

Esta librería es una solución para sincronizar datos entre dos bases de datos MySQL. Diseñada con un enfoque en la integridad referencial, esta librería permite escenarios de migración de datos, replicación o mantenimiento de bases de datos en forma de espejo.

Características principales

Instalación

Puedes instalar esta librería vía Composer:

composer require dankkomcg/mysql-sync

Uso básico

use Dankkomcg\MySQL\Sync\Loggers\ConsoleLogger;
use Dankkomcg\MySQL\Sync\SyncManager;

// Configuración de las bases de datos
$sourceConfig = [
    'host' => 'localhost',
    'dbname' => 'source_database',
    'user' => 'username',
    'password' => 'password'
];

$targetConfig = [
    'host' => 'localhost',
    'dbname' => 'target_database',
    'user' => 'username',
    'password' => 'password'
];

$sourceConnection = new DatabaseConnection($sourceHost, $sourceUsername, $sourcePassword, $sourceSchema);
$targetConnection = new DatabaseConnection($targetHost, $targetUsername, $targetPassword, $targetSchema);

$syncManager      = new SyncManager($sourceConnection, $targetConnection);

// The chunk size and the query order are required
$syncManager->setChunkSize(1000);
$syncManager->setQueryOrder('DESC');

// Records per table its optional
$syncManager->setMaxRecordsPerTable(1000);

// Run the synchronization from schemas
$syncManager->run($sourceSchema, $targetSchema);

Configuración avanzada

Filtrar tablas

El método setFilteredTables(array $tables) permite especificar qué tablas sincronizar, ofreciendo un control más granular sobre el proceso de sincronización. Simplemente setear el método e indicar las tablas a sincronizar:

$syncManager->setFilteredTables(['users', 'clients']);

Debemos tener en cuenta que estas tablas pueden tener dependencias respecto a otras tablas, por lo tanto, deberíamos sincronizar las tablas dependientes.

Custom logger

Se puede implementar un custom logger extendiendo la interfaz Logger:

use Dankkomcg\MySQL\Sync\Loggers\Logger;

class CustomLogger implements Logger {
    // Implementa los métodos requeridos
}

$syncManager->setLogger(new CustomLogger());

Composite logger

// Config the logger
$compositeLogger = new CompositeLogger();
$compositeLogger->addLogger(new ConsoleLogger);
$compositeLogger->addLogger(
    new FileLogger(
        sprintf(
            "synchronize_database_%s.log", date('Ymd_His')
        )
    )
);

$syncManager->setLogger($compositeLogger);

Manejo de dependencias cíclicas

La librería utiliza un DependencyResolver para manejar dependencias entre tablas. En caso de dependencias cíclicas, se emitirá una advertencia y se procederá con un orden best-effort.

Consideraciones de rendimiento

Limitaciones conocidas

Contribuciones

Las contribuciones son bienvenidas. Por favor, abre un issue para discutir cambios antes de enviar un pull request.

Licencia

Este proyecto está licenciado bajo Licencia MIT.