2012-12-08 14 views
9

È davvero un problema mantenere sincronizzati manualmente i database di produzione e sviluppo.Strumento di sincronizzazione o migrazione del database

C'è uno strumento che consente di mantenere sincronizzati i due database? Qualcosa come la sorprendente cosa Laravel framework's migrations?

Sto usando MySQL e PHP. Ho cercato qua e là ma non sono riuscito a individuare lo strumento giusto per il lavoro.

+0

Dai un'occhiata alla Liquibase o Flyway. Usano Java in background ma sono semplici strumenti a riga di comando per portare a termine il lavoro. –

risposta

-2

Se si desidera che i due DB siano identici, perché non utilizzare la replica MySQL con la produzione come master e il server di sviluppo come slave.

MySQL Replication Docs

+0

Qualsiasi aggiornamento effettuato sullo slave confonderà e/o interromperà la replica. Gli slave di sola lettura non creano buoni database di sviluppo. – Charles

+0

Sì, d'accordo, suppongo di non aver pensato troppo in profondità a cosa avrebbe dovuto fare esattamente il DB dev. – shannonman

0

Non è chiaro esattamente ciò che si desidera ...

  • un modo da prod a dev?
  • dati o ddl o entrambi?

un'occhiata a questa discussione: How to synchronize development and production database

+0

Sync significa mantenere entrambi sincronizzati :) Intendo in entrambi i modi – Dev01

+0

in un uso più casuale, "sync" può essere considerato come mirroring ... come nella sincronizzazione unidirezionale. non hai ancora risposto: ddl o dati o entrambi? supporrei ddl ... se è così, vedi il link fornito. –

1

Se non ho torto, è necessario uno strumento per creare il controllo della versione del database per tenere traccia delle modifiche dello schema. È possibile utilizzare i comandi Cygnite Migration. È semplice da usare e semplifica il tuo lavoro.

Per la vostra Reference

Migration & Seeding Video Tutorial

Database migration tool

1

Partenza schematica, è progettato per lavorare con file di schema in YAML o JSON, e può essere installato a livello globale:

http://andrefigueira.github.io/Schematic/

Ed è progettato per essere impegnato con il VCS in modo da le versioni di atabase sono memorizzate con il commit del tuo progetto.

-2

1. fai in modo che il tuo database remoto o di produzione accetti la connessione remota utilizzando una wild card o un indirizzo IP speciale! attraverso una sorta di cpanel o file di configurazione!

2. puoi estendere il comando db artisan come "db: sync".

3. codice di comando (non ancora testato):

$db_local = Config::get('database.'.env('DB_CONNECTION', 'db_local')); 
$dump = "tmp.db"; 
exec("mysqldump --user={$db_local['username']} --password='{$db_local['password']}' --host={$db_local['host']} {$db_local['database']} --ignore-table={$db['database']}.some_table > $dump"); 
$db_remote = Config::get('database.'.env('DB_CONNECTION', 'db_remote')); 
exec("mysql --user={$db_remote['username']} --password='{$db_remote['password']}' --host={$db_remote['host']} {$db_remote['database']} < $dump"); 

non ho aggiunto alcun controllo funzionale come di solito è destinato a lavorare.

Puoi ad esempio invece di un comando, aggiungere un po 'di automazione usando eventi, cron job, ascoltatori ... ci sono molte opzioni, ma il trucco della parte logica principale è: Definire i nomi delle variabili d'ambiente per le tue connessioni 2 db, e nella app config database.php, definisci le tue credenziali di connessione ecc., e infine fai uso di exec, mysqldump & mysql.

Buona fortuna

Problemi correlati