2012-09-16 27 views
11

Tôi đang cố sử dụng liquibase để tạo ra thay đổiLog, bắt đầu bằng cách chụp nhanh trạng thái hiện tại của cơ sở dữ liệu của tôi.Liquibase - cách tạo một thay đổi cho cơ sở dữ liệu hiện có

chi tiết Môi trường:

  • Hệ điều hành: Windows 7 32 x86,
  • Java JDK 1.7,
  • mysql trình điều khiển JDBC từ MySQL
  • liquibase 2.0.5.

tôi chạy sau từ dòng lệnh:

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

Nó chạy tốt, và tạo ra các tập tin đầu ra. Nhưng tệp đầu ra chỉ chứa:

<?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"/> 

Và không có bảng nào được tạo trên cơ sở dữ liệu của tôi (tôi đang mong đợi hai bảng được sử dụng để theo dõi).

Tôi đang thiếu gì?


CÁC CHỈNH SỬA

Vâng, tôi đang đề cập đến liquibasechanlog và bảng liquibasechangelock. Tôi biết họ sẽ tự động xuất hiện trên cơ sở dữ liệu. Câu hỏi của tôi là tại sao họ không ở đó. Và có, người dùng được cung cấp có các quyền được cấp để thực hiện tác vụ đó.

Và nó không phải là một cơ sở dữ liệu trống. Nó có gần 20 bảng, 10 điểm, dữ liệu ...

+0

Bởi hai bảng được sử dụng để theo dõi bạn có nghĩa là 'liquibasechangelog' và 'liquibasechangeloglock'? Chúng không thực sự được quản lý với liquibase.xml nhưng được tạo tự động cho bạn. –

+0

Để mở rộng những gì Christoph đã hỏi. Cơ sở dữ liệu của bạn không chứa các bảng ứng dụng và bạn đang hỏi tại sao biểu tượng thay đổi trống? :-) –

+5

Tôi có cùng một hành vi mà bạn mô tả nếu tôi không chỉ định cơ sở dữ liệu trong url kết nối '--url =" jdbc: mysql: //mysql.mysite.com "' nhưng nếu tôi thêm tên cơ sở dữ liệu thì hoạt động tốt: '--url =" jdbc: mysql: //mysql.mysite.com/dummy "'. – poussma

Trả lời

7

Chỉ cần ghi rõ tên cơ sở dữ liệu với cờ --url như znk nói:

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

tôi đã phải đối mặt với vấn đề tương tự khi tạo changelog xml cho postgresql cơ sở dữ liệu. Tôi đăng bài ở đây nếu nó có thể giúp ai đó. Tôi phải chỉ định --defaultSchemaName ngoài các thông số trên. Vì vậy, trong mysql, bạn sẽ có tùy chọn tương tự:

Lệnh cuối cùng sẽ trông giống như:

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

Sau khi tạo file changelog ban đầu, bạn nên thực hiện 'changelogsync', nó sẽ tạo ra những bảng trong cơ sở dữ liệu của bạn và cập nhật chúng, cũng ghi lại trạng thái hiện tại của thay đổi của bạn là 'đã chạy' (vì vậy sẽ không thực thi trong các bản cập nhật tiếp theo)

Các vấn đề liên quan