Data migration is the process of transferring data between storage types, formats, or computer systems. It is a key consideration for any system implementation, upgrade, or consolidation. Data migration is usually performed programmatically to achieve an automated migration, freeing up human resources from tedious tasks. Data migration occurs for a variety of reasons, including server or storage equipment replacements, maintenance or upgrades, application migration, website consolidation and data center relocation.
Migration file is file placed in special directory like /migrations
. Migration file name contains 3 parts: migration id, description separated by space (optional) and extension separated by dot (optional) - the valid names for migration files are {id}
, {id}.{extension}
, {id} {description}
and {id} {description}.{extension}
.
user@localhost:~/project/migrations$ ls
M0001 M0002.ext M0003 - Third migration M0004 - Fourth migration.ext
Migration tools process all files located in directory in ascending order (sorted by file names). If applying of any migration file throws exception, the changes invoked by this file will be canceled and migration tool will be stopped.
Migration tools also contain lists of applied migrations and guarantee that every file will be processed only once and only in case that there is not applied migration with higher id.
All migration tools implement MigrationToolInterface
with method migrate()
.
<?php
/**
* @var $tool PetrKnap\Php\MigrationTool\MigrationToolInterface
*/
$tool->migrate();
WARNING: The SQL migration tool processes only files with extension sql
.
<?php
/** @var \Doctrine\DBAL\Connection $connection */
$tool = new PetrKnap\Php\MigrationTool\SqlMigrationTool(
__DIR__ . '/migrations',
$connection
);
/** @var \Psr\Log\LoggerInterface $logger */
$tool->setLogger($logger);
$tool->migrate();
SQL migration tool supports native SQL files as migration file. You can simply copy and paste output from orm:schema-tool:update --dump-sql, phpMyAdmin, Adminer or whatever with SQL output.
Run composer require petrknap/php-migrationtool
or merge this JSON code with your project composer.json
file manually and run composer install
. Instead of dev-master
you can use one of released versions.
{
"require": {
"petrknap/php-migrationtool": "dev-master"
}
}
Or manually clone this repository via git clone https://github.com/petrknap/php-migrationtool.git
or download this repository as ZIP and extract files into your project.