2012-09-27 2 views
3

나는 이것에 대한 검색을 시도했지만 지금까지 "데이터가없는 테이블 스키마 내보내기"에 대한 결과 만 찾고 있는데, 이는 정확히 내가하고 싶은 것과는 반대입니다. 스크립트를 테이블을 다시 만들지 않고 SQL 테이블에서 데이터를 내보내는 방법이 있습니까?스키마없이 테이블 데이터 내보내기?

다른 사람들이 더 나은 해결책을 가지고 있다면 해결해야 할 문제가 있습니다. 두 개의 데이터베이스가 각기 다른 서버에 있습니다. 원시 데이터베이스와 분석 데이터베이스라고합니다. 원시 데이터베이스는 "실제"데이터베이스이며 트랜잭션 InnoDB 엔진을 사용하여 서버로 전송 된 레코드를 수집하여 테이블에 저장합니다. 분석 데이터베이스는 내부 LAN에 있으며 원시 데이터베이스를 미러하기위한 것이므로 원시 데이터베이스와 일치하도록 주기적으로 업데이트됩니다. 데이터의 분석과 처리를 수행하는 프로그램이 있고 라이브 서버에서 처리하지 않으려는 목적으로 분리되어 있습니다.

분석 데이터베이스는 단지 사본 일 뿐이므로 트랜잭션 일 필요는 없으므로 데이터를 가져 오는 것이 훨씬 빠르다고 판단하여 테이블에 MyISAM 엔진을 사용하고 싶습니다. 에 대한 쿼리. 문제는 라이브 원시 데이터베이스에서 테이블을 내보낼 때 테이블 스키마가 반출되고 테이블 엔진이 InnoDB로 설정되므로 데이터를 분석 데이터베이스로 가져 오기 위해 스크립트를 실행할 때 MyISAM 테이블이 삭제된다는 것이다 그것을 InnoDB 테이블로 다시 만든다. 데이터 내보내기/가져 오기 프로세스를 자동화하고 싶습니다. 그러나 테이블 엔진을 MyISAM에서 InnoDB로 변경하는 생성 된 SQL 스크립트 파일의이 문제는 나를 막는 것이며이를 해결하는 방법을 모르겠습니다. 내가 아는 유일한 방법은 실제 원시 데이터베이스에 직접 액세스 할 수있는 프로그램을 작성하고 쿼리를 수행하고 결과로 분석 데이터베이스를 업데이트하는 것입니다. 그러나 이것에 대한 대안을 찾고 있습니다.

답변

6

좋아요? | mysqldump를의 MYDB :

mysqldump --no-create-info ... 
+0

대안 no-create-info 옵션을 사용하여 sed의/InnoDB/MyISAM/g '> dumpasMyISAM.txt –

+0

완벽한, 고마워! 장래의 참고로,이 옵션의 짧은 형식은'-t'이며, 데이터베이스를 생성하지 않는'--no-create-db'가 있습니다 (축약 형은'-n'입니다). 덤프 할 특정 레코드를 지정하려면'--where = '...''(약식'-w '...'') 옵션이 있습니다. – Cornstalks

1

는 UNIX 도구에 액세스 할 수있는 경우, 당신은 테이블 스키마와 mysqldump에,와 sed를 통해 파이프를 수

mysqldump --no-create-info db [table] 
관련 문제