2015-02-04 5 views
2

큰 * .sql 덤프 (~ 4GB)를 RDS의 내 DB 중 하나로 복원하려고합니다. 마지막으로 Workbench를 사용하여 복원하려고 시도했으며 전체 프로세스가 완료 될 때까지 약 24 시간 이상이 걸렸습니다.RDS에 SQL 덤프를 복원하는 가장 빠른 방법

더 빠른 방법이 있는지 궁금합니다. 제발 도와주세요 그리고 당신의 생각을 공유

편집 : 나는 나의 로컬 컴퓨터에 덤프를 가지고있다. 순간

내가 마음에 두 가지 옵션이 있습니다 :

  1. DB를 덤프 http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.NonRDSRepl.html
  2. (낮은 자신감)이 링크를 따라 그것을 압축하고 다음 중 하나에 압축 된 덤프를 업로드를 내 EC2 인스턴스 내 EC2 인스턴스에 다음 SSH 나는 (내가 점에서 더 자신감을 가지고 간단하기 때문에) 두 번째 방법을 선호 mysql> source backup.sql;

뿐만 아니라 그것을는 FA 것입니다 않습니다 전체 덤프가 처음 업로드되고 압축 해제 된 후 마지막으로 복원 된 이후로 업로드 시간을 단축했습니다.

+0

amazon에서 cnf – Mihai

답변

1

EC2 중개자를 사용하는 것에 대한 직감은 정확하지만 실제로 가장 큰 이점은 실제로 AWS 내부에있는 것입니다. 때때로 유사한 절차를 수행하여 한 RDS DB 인스턴스에서 다른 인스턴스로 6GB 데이터베이스의 내용을 이동합니다.

내 구성 :

  • 소스 DB 인스턴스와 대상 DB 인스턴스가 같은 지역 및 가용성 영역에 있습니다. 둘 다 db.m3.large입니다.
  • EC2 인스턴스가 DB 인스턴스와 동일한 지역 및 가용성 영역에 있습니다.
  • EC2 인스턴스는 compute optimized입니다. (처음부터 다시 시작한다면 c3.xlarge를 사용하지만 c4 제품군을 권장합니다.)

여기에서 EC2 인스턴스를 사용하여 소스 인스턴스에서 아주 간단한 mysqldump를 수행 한 다음 대상 인스턴스에 매우 간단한 mysqlrestore를 수행합니다.

절차가 진행되는 동안 네트워크 대기 시간이 줄어들 기 때문에 동일한 지역 및 가용 영역에있는 것이 실제로 큰 차이를 만듭니다. 이 경우에도 데이터 전송은 free or near-free입니다. EC2 및 RDS 인스턴스 모두에 대해 선택한 인스턴스 클래스도 중요합니다. 빠른 작업이되도록하려면 I/O를 최대화 할 수 있어야합니다.

충분한 대기 시간을 제공하지 않으면 네트워크 대기 시간과 CPU 같은 외부 요인으로 인해 병목 현상이 발생할 수 있습니다. db.m3.large 인스턴스의 예에서 MySQLDump의 소요 시간은 5 분 미만이고 MySQLRestore의 소요 시간은 약 15 분입니다. 이전에 db.m3.medium RDS 인스턴스로 복원하려고했는데 CPU 병목 현상이 발생하여 복원 시간이 한 시간 이상 걸렸습니다. EC2 인스턴스를 따라갈 수 없었습니다. 내가 로컬 컴퓨터에서 복원 할 때 네트워크 외부에 있으면 전체 프로세스가 4 시간 이상 걸립니다.

이 EC2 중개자는 24 시간 연중 무휴로 제공 될 필요가 없습니다. 작업을 마치면 종료하거나 종료하십시오. 나는 c3.xlarge 시간 만 지불해야합니다. 또한 덤프 중에 사용 가능한 리소스를 늘리려면 RDS 인스턴스 클래스를 일시적으로 위/아래로 확장 할 수 있습니다. 가능하다면 로컬 컴퓨터를 방정식에서 벗어나게하십시오.

이 전략에 관심이 있으시면 AWS는 직접 documentation을 제공해 주셨습니다.

+1

고마워, 나는 당신이 제안한 것과 유사한 접근법을 사용하여 끝내었다. 대기 시간 현명한, 나는 이것이 가장 빠른 방법이라고 생각합니다. 유일한 병목 현상은 내 로컬 pc (내 장소에서)에서 내 EC2 인스턴스로 dump.sql을 전송하는 것이 었습니다. 그러나 일단 dump.sql이 EC2에 있으면 (즉, 여기에 약간 과장되어있을 수 있습니다) 조명이 빠릅니다. – Jeremy

-2

명령은 항상 Workbench보다 빠릅니다. 이 명령을 사용하여 데이터베이스를 복원하십시오.

복원하려면 :

mysql -u root -p YOUR_DB_NAME < D:\your\file\location\dump.sql

가 덤프를 취할 :

mysqldump -u root -p YOUR_DB_NAME > D:\your\file\location\dump.sql

+0

에 대한 액세스 권한을 제공한다고 가정하면 max_allowed_packet과 같은 일부 변수를 변경하여 업로드 프로세스가 더 빨라지는지 살펴 봅니다. 자세한 내용은 내 업데이트를 참조하십시오. 건배. – Jeremy

+0

업데이트 참조 :)) –

+1

"명령은 항상 Workbench보다 빠릅니다"에 대한 -1 : "명령 행은 항상 MySQL Workbench보다 빠릅니다." 그것은 단순히 잘못된 것입니다. 많은 작업에서 MySQL Workbench는 명령 행 응용 프로그램을 사용하기 때문에 어떻게 느려질 수 있습니까? –

2

나의 제안은 큰 테이블의 테이블 현명한 백업을 수행하고 사용하지 않도록 설정하여 복원하는 것입니다 색인. 그러면 어떤 레코드가 두 배 이상의 속도로 빠르게 삽입되고 복원이 완료되면 간단하게 인덱스가 활성화됩니다.

ALTER TABLE `table_name` DISABLE KEYS; 

후 복원이 완료 :

하기 전에 복원 명령을

SET FOREIGN_KEY_CHECKS = 0; 
SET UNIQUE_CHECKS = 0; 
SET AUTOCOMMIT = 0; 
:

ALTER TABLE `table_name` ENABLE KEYS; 

또한 디스크 액세스의 큰 거래를 방지하기 위해 파일의 상단에 이러한 추가 명령을 추가

마지막에 다음을 추가하십시오.

SET UNIQUE_CHECKS = 1; 
SET FOREIGN_KEY_CHECKS = 1; 
COMMIT; 

감사합니다.