2012-12-08 7 views
9

To naprawdę problem z ręcznym synchronizowaniem baz danych produkcji i programowania.Narzędzie do synchronizacji lub migracji bazy danych

Czy istnieje narzędzie umożliwiające synchronizację obu baz danych? Coś w stylu niesamowitej rzeczy o nazwie Laravel framework's migrations?

Używam MySQL i PHP. Szukałem tu i tam, ale nie byłem w stanie znaleźć odpowiedniego narzędzia do tej pracy.

+0

Wystarczy popatrzeć na Liquibase lub Flyway. Używają środowiska Java w tle, ale są prostymi narzędziami, które umożliwiają wykonanie zadania. –

Odpowiedz

-2

Jeśli chcesz, aby te dwa bloki były identyczne, możesz użyć replikacji MySQL z produkcją jako serwerem głównym i serwerem dev jako urządzeniem podrzędnym.

MySQL Replication Docs

+0

Wszelkie aktualizacje dokonane na urządzeniu slave będą mylić piekło i/lub przerwać replikację. Slave tylko do odczytu nie tworzą dobrych baz danych deweloperów. – Charles

+0

Zgadza się, zgaduję, że nie myślę zbyt głęboko w tym, czego dokładnie potrzebuje DB dev do robienia. – shannonman

0

Nie jest jasne, co dokładnie chcesz ...

  • jedna droga od prod do dev?
  • dane lub ddl lub jedno i drugie?

spojrzeć w tym wątku: How to synchronize development and production database

+0

Synchronizacja oznacza zachowanie obu synchronizacji :) Mam na myśli zarówno sposób – Dev01

+0

w bardziej swobodnym użytkowaniu, "synchronizacja" może oznaczać odbicie lustrzane ... jak w jednokierunkowej synchronizacji. wciąż nie odpowiedziałeś: ddl lub dane lub oba? Zakładam, że ddl ... jeśli tak, zobacz podany link. –

1

Odjazd schematyczny Jest przeznaczony do pracy z plikami schematu w YAML lub JSON i może być instalowany globalnie:

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

Został zaprojektowany tak, aby można go było wykorzystać w VCS, aby wersje atabase są przechowywane wraz z zatwierdzeniem projektu.

-2

1. spraw, aby zdalna lub produkcyjna baza danych akceptowała połączenie zdalne za pomocą karty wieloznacznej lub specjalnego adresu IP! poprzez jakiś plik cpanel lub config!

2. można rozszerzyć polecenie db artisan, takie jak "db: sync".

3. kod polecenia (jeszcze nie testowane):

$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"); 

zrobiłem nie dodawać żadnych kontrolę funkcjonowania jak zwykle jest on przeznaczony do pracy.

Można na przykład zamiast polecenia, dodać trochę automatyzacji przy użyciu wydarzenia, crona słuchaczy ... jest wiele opcji, ale główną część logiki Sztuką jest: Definiowanie zmiennych środowiskowych dla połączeń 2 dB aw app config database.php, zdefiniuj swoje poświadczenia połączeń itd., a na końcu użyj mysqldump, mysqldump &.

Powodzenia