2010-04-20 4 views
1

라이브 서버에 여러 테이블이있는 MySQL 데이터베이스가있는 경우이 데이터베이스를 다른 서버로 마이그레이션하고 싶습니다. 물론, 여기서 말하는 마이 그 레이션은 데이터베이스 테이블과 관련이 있습니다. 예를 들어 여러 테이블에 새로운 열을 추가하고 새로운 테이블을 추가하는 등의 작업을 수행 할 수 있습니다. 이제는 생각할 수있는 유일한 방법은 일부 PHP/Python 내가 아는 스크립트) 스크립트를 실행하고, 두 개의 데이터베이스를 연결하고, 이전 데이터베이스의 데이터를 덤프 한 다음 새 데이터베이스에 씁니다. 그러나이 방법은 효율적이지 않습니다. 예 : 이전 데이터베이스에서 A 테이블에는 28 개의 열이 있습니다. 새 데이터베이스에서 테이블 A에는 29 개의 열이 있지만 추가 열은 모든 이전 행에 대해 기본값 0을가집니다. 내 스크립트는 여전히 행 단위로 데이터를 덤프하고 각 행을 새 데이터베이스에 삽입해야합니다.MySQL 데이터베이스 마이그레이션에 관한 질문

MySQLDump 등 사용은 작동하지 않습니다. 여기에 세부 사항이 있습니다. 예를 들면 : 나는 네 개의 오래된 데이터베이스를 가지고 있는데, 'DB_a', 'DB_b', 'DB_c', 'DB_d'로 이름을 붙일 수 있습니다. 이제 이전 테이블 A에는 28 개의 열이 있습니다. 테이블 A의 각 행을 새로운 열 ID 'DB_x'(x는 해당 데이터베이스의 출처를 나타 내기 위해)와 함께 새 데이터베이스에 추가하려고합니다. 행의 내용으로 데이터베이스 ID를 구별 할 수없는 경우 식별 할 수있는 유일한 방법은 일부 사용자 입력 매개 변수를 통과하는 것입니다.

직접 스크립트를 작성하는 것보다 유용한 도구 나 방법이 있습니까? 여기에서는 다중 스레드 작성 문제 등을 걱정할 필요가 없습니다. 이전 데이터베이스는 잠시 동안 다운 될 것입니다 (공용 사용 등은 열지 말 것).

감사합니다.

답변

1

열을 사용하여 상황을 완전히 이해할 수는 없지만 (마이그레이션 후 새 열을 추가하는 것이 더 바람직하지 않겠지 만) 데이터베이스간에 데이터베이스를 복사하는 가장 빠른 방법 중 하나는 mysqlhotcopy입니다. myISAM 만 복사 할 수 있고 다른 많은 요구 사항이 있지만 덤프 생성/가져 오기 덤프 단계를 완전히 건너 뛰기 때문에 속도가 매우 빠릅니다.

+0

데이터를 덤프 한 다음 스키마를 변경하면 여기에서 작동하지 않습니다. 전체 상황은 실제로 다음과 같습니다. 현재 4 개의 데이터베이스를 1로 병합해야합니다. 제 질문을보다 자세히 수정합니다. – WilliamLou

0

물론 당신이하려는 것을 달성하는 데 도움이되는 도구가 있습니다. Mysqldump은 이러한 도구의 대표적인 예입니다. 그냥 여기에 눈을 : http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html

당신이 할 수있는 것은 :

1) 당신은 스키마를 가져)에 --no-데이터 옵션 mysqldump는을 (사용하여 현재 DB의 덤프를 만들) 단지 구문에 대한 자세한 도움을을 복원 MySQL의 백업 구글 -

2) 당신은 당신이 당신의 새로운 스키마 (MySQL의 < dump.sql을 작성) 새로운 열

3

를 추가, 당신은 버려진 한 스키마를 변경

4) mysqldump는 전체-삽입 옵션을 사용하여 데이터를 덤프 (행운이 당신을 위해 일을해야 MySQL의 <에게 data.sql

를 사용하여 데이터를 가져 오기))

5 위의 링크를 참조 !

0

mysqldump을 사용하여 데이터를 덤프 한 다음 echo output.txt > msyql을 씁니다. 이제 이전 데이터가 새 서버에 있습니다. 필요에 따라 조작하십시오.

1

일반적으로 데이터베이스를 새 서버로 마이그레이션 할 때 현재 실행중인 이유로 인해 스키마 변경 사항이 동시에 적용되지 않습니다.

MySQL에는 데이터베이스의 스냅 샷/백업을 쉽게 취할 수있는 mysqldump이라는 덤프 도구가 있습니다. 그런 다음 스냅 샷을 새 서버에 복사하여 설치할 수 있습니다.

"새"데이터베이스에서 수행 된 모든 변경 사항을 파악하고 이전 데이터베이스를 사용중인 새 버전으로 "업그레이드"하는 데 필요한 모든 SQL 명령 스크립트를 작성해야합니다 예 : ALTER TABLE a ADD COLUMN x 등). 작동하는지 확인한 후 이전 버전을 덤프하고 복사 한 다음 설치하고 변경 스크립트를 적용하십시오. 여분의 행을 추가

0

는 라이브 데이터베이스에 수행 할 수 있습니다

ALTER TABLE [table-name] ADD [row-name] MEDIUMINT(8) default 0; 

MySQL은 기본값으로 기존의 모든 행을 기본값으로 설정됩니다. 그래서 여기

내가 할 것 인 것이다 : 당신이 MySql dump 명령을 사용하여 기존 데이터베이스이야의

  1. 이 복사본을 만듭니다.

  2. 결과 데이터베이스를 새로운 데이터베이스로 실행하면 정확한 복사본이 생깁니다.

  3. 수정 테이블 명령을 사용하는 데이터베이스와 일부 임시 MySql 절차의 복잡한 변환을 수정하는 migration.sql 파일을 작성하십시오.

  4. 테스트 당신은 스크립트입니다 (실패 할 경우 (2)로 가십시오).

  5. 모두 괜찮 으면 다음 goto (1)을 사용하고 새로운 데이터베이스를 사용하십시오.

0

이들은 모두 유효한 접근 방법이지만 사용자가 가지고있는 새로운 열을 지원하는 다른 삽입 문을 작성하는 SQL 문을 작성하려고합니다.

관련 문제