2012-08-09 2 views
0

나는 테이블과 저장 프로 시저를 기본 스키마에서 새 스키마로 복사해야합니다.내 응용 프로그램에서 자바를 사용하여 MySQL의 스키마를 복사하는 방법

나는 이것을 구현할 방법을 찾고있다. 나는 클라이언트 쪽 응용 프로그램을 가지고 있기 때문에 이것은 클라이언트 쪽에서 서버의 점적을 필요로하기 때문에 cmd를 사용하여 mysqldump를 정확하게 조사했지만 좋은 해결책은 아닙니다. 다른 옵션은 쇼 쿼리를 사용하는 필자 자신의 임플란트입니다. 여기에서 문제는 처음부터 모두 구현해야하고 문제가되는 부분은 테이블에 외래 키가있을 경우 테이블의 순서를 정렬해야하기 때문입니다 (테이블에 외래 키가 있으면 테이블 나는 처음에 만들어야 할 필요성을 지적한다.)

또한이 작업을 수행하는 저장 프로 시저를 만들지 만 SQL 내에서 저장 프로 시저를 사용하면 디스크에 액세스 할 수 없습니다.

아마도 다른 사람이 이것을 어떻게 다른 방식으로 구현할 수 있을지에 대한 아이디어가 있습니까?

+0

http://stackoverflow.com/questions/8206185/how-can-i-use-jdbc-to-copy-schema-from-one-database-to-another – Santosh

+0

@Santosh 감사하지만 아무튼 테이블을 만들 순서를 고려하지 않기 때문에 도움이되지 않습니다. – raven

답변

0

information_schema을 사용하여 외래 키 정보를 가져 와서 종속성 트리를 빌드 할 수 있습니다. 다음은 example입니다.

그러나 저는 여러 번 전에 해결 된 것을 해결하려고 노력하고 있다고 생각합니다. 나는 Java에 익숙하지 않지만 현재 데이터베이스를 검사하고 Java (또는 Python)로 보완 모델을 만들 수있는 ORM 도구 (Python 용)가 있습니다. 그런 다음 해당 모델을 다른 데이터베이스에 배치 할 수 있습니다.

+0

예, 최대 절전 모드처럼 이렇게하는 몇 가지 도구에 익숙하지만 시간이 오래 걸릴 것입니다. 그래서 나는 정규 JDBC를 사용하여 이것을하는 무언가가 필요하다. – raven

1

Apache ddlutils을 사용해보세요. ddls를 데이터베이스에서 xml 파일로 내 보낸 다음 다시 가져 오는 방법이 있습니다.

api usage 페이지에는 스키마를 XML 파일로 내보내고 xml 파일에서 읽고 새 데이터베이스에 적용하는 방법에 대한 예제가 있습니다. 나는 당신이 요구하는 것을 성취하기 위해 그것을 사용하는 방법에 대한 작은 스 니펫과 함께 그 기능들을 아래에 재현 해왔다. 이것을 시작점으로 사용하고 더 이상 최적화 할 수 있습니다.

DataSource sourceDb; 
DataSource targetDb; 

writeDatabaseToXML(readDatabase(sourceDb), "database-dump.xml"); 
changeDatabase(targetDb,readDatabaseFromXML("database-dump.xml")); 



public Database readDatabase(DataSource dataSource) 
{ 
    Platform platform = PlatformFactory.createNewPlatformInstance(dataSource); 
    return platform.readModelFromDatabase("model"); 
} 

public void writeDatabaseToXML(Database db, String fileName) 
{ 
    new DatabaseIO().write(db, fileName); 
} 

public Database readDatabaseFromXML(String fileName) 
{ 
    return new DatabaseIO().read(fileName); 
} 

public void changeDatabase(DataSource dataSource, 
          Database targetModel) 
{ 
    Platform platform = PlatformFactory.createNewPlatformInstance(dataSource); 
    platform.createTables(targetModel, true, false); 
} 
+0

감사합니다. @ gkamal에 대해 살펴 보겠습니다. – raven

관련 문제