2014-09-04 4 views
0

저는 MySQL과 PHP가 관련된 프로젝트에서 일해 왔습니다. 테스트를 위해 패키지를 만드는 동안 나는 MySQL의 워크 벤치에서 SQL 파일로 MySQL 데이터베이스를 수출mysql 데이터베이스를 내보내고 가져 오는 가장 좋은 방법은 무엇입니까?

mysql>source mydatabase.sql; 

이 올바른 내보내는 방법 및 가져 오기 MySQL 데이터베이스입니다와 리눅스 머신의 MySQL 서버로 가져온? 또한 데이터베이스 파일에는 스키마 작성, 데이터 삽입 및 색인 스크립트 작성이 포함됩니다. 가져 오기는이 파일로 오랜 시간이 걸립니다. 즉각적인 관리자는 색인없이 인덱스를 내보내고 데이터베이스를 가져온 다음 인덱스 생성 스크립트를 실행하도록 제안합니다. 이것이 올바른 방법입니까? 데이터베이스를 가져 오는 동안 인덱스에 시간이 오래 걸립니까?

미리 감사드립니다.

+0

어느 쪽이든 나에게 들리면, 테이블 인덱싱에 시간이 걸릴 것입니다. 어쨌든 이것은 정확하다고 보입니다.다른 대안은 SELECT INTO 다른 데이터베이스를 수행하는 것입니다. 그것은 가능하거나 불가능할 수도 있습니다. 하지만 시간이 절약됩니다. – durbnpoisn

답변

1

내보내기는 실행중인 MySQL 버전/공급 업체에 따라 다릅니다!

  • MySQL은 (이전 버전) - mysqldump는
  • MySQL을 (percona)를 사용 - XtraBackup에게
  • MySQL의 (- 5.6 EE를) - 사용 및 훨씬 더 빨리 더 복잡의 MySQL 엔터프라이즈 백업을 사용합니다.

가장 빠른 방법은 mysqldump를 피하는 것입니다.

저는 Percona를 더 좋아합니다!
또 다른 방법이지만 더 진보적 인 생각은 대상 서버에 DB를 만들고 데이터베이스 파일을 직접 복사하는 것입니다. 파일 소유권 확인, DB 파일을 복사하기 전에 두 서버에서 mysqld를 중지하고 권한이 올바른지 :

[[email protected]]# /etc/init.d/mysqld stop 
[[email protected]]# cd /var/lib/mysql/[databasename] 
[[email protected]]# scp * [email protected]:/var/lib/mysql/[databasename] 
[[email protected]]# /etc/init.d/mysqld start 

중요 여기 것들 :
루트 사용자로서 : 사용자를 가정하면 대상 서버의 MySQL의 디렉토리에 액세스 할 수 있습니다 대상 서버에서 mysqld를 시작하기 전에 대상 서버에 저장한다. 시간이 여기에 당신의 우선 순위가되고, 시간 (gzip 같은 뭔가) 압축/압축 해제를 기다리고 분실 여부에 따라 달라집니다 압축의 사용은 비 압축 데이터를 전송 낭비 시간보다 더 큰 것으로

[[email protected]]# chown mysql:mysql /var/lib/mysql/[databasename]/* 
[[email protected]]# chmod 660 /var/lib/mysql/[databasename]/* 
[[email protected]]# /etc/init.d/mysqld start 

; 즉, 연결 속도입니다.

1

Percona Server은 수정 된 mysqldump 도구와 함께 제공되므로 --innodb-optimize-keys 옵션을 선택할 수 있습니다. 이것은 주식 mysqldump와 같은 테이블, 데이터 및 인덱스 정의를 내 보냅니다. 그러나 가져 오는 동안 데이터가 테이블에로드 된 후 이후에 까지 보조 인덱스 생성을 연기합니다. 이것은 InnoDB의 fast index creation 기능을 이용합니다.

또 다른 옵션은 Percona XtraBackup (사용자 @Up_One)과 같은 실제 백업 도구를 사용하는 것입니다. 즉, 인덱스를 포함하여 전체 데이터 파일이 백업됩니다. 복원시 인덱스가 이미 채워지기 때문에 다시 작성할 필요가 없습니다. 장단점 물리적 백업 도구를 사용하는 것도 있지만 복원 시간이 큰 이점입니다.

관련 문제