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.
Puedes instalar esta librería vía Composer:
composer require dankkomcg/mysql-sync
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);
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.
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());
// 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);
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
.
Las contribuciones son bienvenidas. Por favor, abre un issue para discutir cambios antes de enviar un pull request.
Este proyecto está licenciado bajo Licencia MIT.