2012-09-16 4 views
11

Próbuję użyć liquibase do generowania changeLog, zaczynając od zrzutu stanu bieżącego mojej bazy danych.Liquibase - jak wygenerować dziennik zmian dla istniejącej bazy danych

szczegóły Środowisko:

  • System operacyjny: Windows 7 32 x86,
  • Java JDK 1.7,
  • mysql jdbc sterownik MySQL
  • liquibase 2.0.5.

uruchomić następujące z linii poleceń:

liquibase --driver=com.mysql.jdbc.Driver --changeLogFile=./structure.xml --url="jdbc:mysql://mysql.mysite.com" --username=<myuser> --password=<mypass> generateChangeLog 

To działa dobrze, a wygenerowany plik wyjściowy. Ale plik wyjściowy zawiera tylko:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd"/> 

W mojej bazie danych nie są tworzone tabele (spodziewałem się dwóch tabel używanych do śledzenia).

Czego mi brakuje?


edytuje

Tak, mam na myśli liquibasechanlog i tabele liquibasechangelock. Wiem, że powinny one automatycznie pojawiać się w bazie danych. Moje pytanie brzmi: dlaczego ich tam nie ma. I tak, dostarczony użytkownik ma prawa przyznane za wykonanie takiego zadania.

I to nie jest pusta baza danych. Ma blisko 20 tabel, 10 widoki danych ...

+0

Przez dwie tabele używane do śledzenia masz na myśli 'liquibasechangelog' i' liquibasechangeloglock'? W rzeczywistości nie są one zarządzane przez plik liquibase.xml, ale są tworzone automatycznie. –

+0

Aby rozwinąć to, o co prosił Christoph. Twoja baza danych nie zawiera tabel aplikacji i pytasz, dlaczego dziennik zmian jest pusty? :-) –

+5

Mam takie samo zachowanie, które opisałeś, jeśli nie określiłem bazy danych w adresie URL połączenia '--url =" jdbc: mysql: //mysql.mysite.com "' ale jeśli dodaję nazwę bazy danych to działa dobrze: '--url =" jdbc: mysql: //mysql.mysite.com/dummy "'. – poussma

Odpowiedz

7

Wystarczy podać nazwę bazy danych z flagą --url jak ŽNK powiedział:

--url="jdbc:mysql://mysql.mysite.com/database_name_here" 
3

miałem podczas generowania changelog xml dla PostgreSQL w obliczu podobnego problemu Baza danych. Zamieszczam tutaj, jeśli może komuś pomóc. Oprócz powyższych paramów musiałem podać --defaultSchemaName. Więc w mysql będzie mieć podobną opcję:

Komenda końcowy będzie wyglądać następująco:

liquibase --driver=org.postgresql.Driver --changeLogFile=db.changelog.xml --classpath=postgresql-9.4-1201-jdbc41.jar --url="jdbc:postgresql://localhost:5432/wms" --username=<USER_NAME> --password=<PASSWD> --defaultSchemaName=<SCHEMA_NAME> generateChangeLog 
0

Po utworzeniu pierwotnego pliku changelog, należy wykonać „changelogsync”, stworzy tych tabel w bazie danych i aktualizuje je, zapisuje także bieżący stan dziennika zmian jako "już uruchomiony" (więc nie będzie wykonywany w następnych aktualizacjach)