2014-04-14 1 views
0

새 사이트마다 새 데이터베이스를 설정해야하는 서비스가 있습니다. 데이터베이스는 정확히 동일하기 때문에 백업 파일에서 덤프하거나 샘플 데이터베이스 (클론 용도로만 생성되며 트랜잭션이 실행되지 않으므로 데이터 손상 문제는 발생하지 않음)에서 복제하거나 동일한 서버에서 복제 할 수 있습니다. 데이터베이스 자체에는 약 100 개의 테이블과 일부 데이터가 들어 있으며 가져 오기에는 약 1-2 분이 소요됩니다. 이는 너무 느립니다.동일한 서버에 전체 데이터베이스 복제?

가능한 한 빨리 처리하는 방법을 찾으려고합니다. 첫 번째 생각은 샘플 데이터베이스 data_dir 내의 파일을 복사하는 것이었지만, 어떻게 든 테이블 목록을 편집해야 할 것처럼 보입니다. 또는 mysql은 여전히 ​​새 데이터베이스의 테이블을 읽을 수는 있지만 여전히 그 테이블을 보여줍니다.

+0

복사되는 데이터의 기가 바이트는 얼마입니까? 당신이 구체적으로하고있는 것을 1-2 분 정도 걸리는 것을 보여 주실 수 있습니까? –

+0

확실, 지금은 mysql -uusername -ppassword datatabase.dump.sql을 사용하여 간단한 복원 db입니다. autocomit, unique_check, foreign_key_checks를 OFF로 설정합니다. – mr1031011

+0

왜 느린지, 디스크에서 전체 데이터베이스를 읽고, mysql 소스 코드로 변환 한 후 전체 데이터베이스를 디스크에 매우 비효율적으로 쓰는 방법을 설명합니다. 형식으로 변환 한 다음 디스크에서 다시 읽은 다음 엄청난 수의 SQL 쿼리를 구문 분석하고 실행 한 다음 모든 데이터를 다시 한 번 작성합니다. 끔찍한 생각. 그건 당신이 데이터베이스를 복제하는 방법이 아닙니다. –

답변

-2

왜 mysql이 테이블 목록에서 변경 사항을 읽을 수 없습니까?

나는 그렇지 않으면 괜찮을 것, mysql을 읽을 수있는 권한의 문제가있을 수 있습니다 생각 ..

감사

데이터베이스 길을 잘못 복제하고
+0

불행히도 그런 식으로 작동하지 않습니다. 전체 데이터베이스 서버가 아닌 하나의 단일 데이터베이스를 복제하려고한다는 것을 기억하십시오. 따라서 파일 만 복사했으나 mysql은 데이터베이스의 테이블 이름 목록을 저장하고 다른 곳에서는 쉽게 복제 할 수 없습니다. – mr1031011

+0

이것은 모든 myisam 테이블이있는 경우에만 가능합니다. 그러면 새 데이터베이스 폴더에있는 모든 myisam 테이블 파일이 단순합니다. –

+0

불행히도 우리는이 경우에 innodb를 사용하고 있습니다. ( – mr1031011

1

, 그것은 훨씬 빨리하면 될 것입니다 제대로해라.

난 그냥 성능 테스트를했다
create database new_database; 
create table new_database.table_one select * from source_database.table_one; 
create table new_database.table_two select * from source_database.table_two; 
create table new_database.table_three select * from source_database.table_three; 
... 

, 이것은 700 만 테이블 행에서 데이터 750MB의 중복 81 초 정도 걸립니다 : 여기

는 데이터베이스를 복제하는 방법이다. 아마 당신의 데이터베이스가 그보다 작을까요?

더 빨리 찾을 수있을 것 같지 않습니다. 당신이 할 수있는 한 가지 방법은 대기 상태의 복제 데이터베이스 대기열을 이미 준비하고 언제든지 사용할 수 있도록 준비하는 것입니다. 따라서 새로운 데이터베이스를 만들 필요가 없습니다. 사용 가능한 데이터베이스의 대기열에서 기존 데이터베이스의 이름을 바꾸면됩니다. 그리고 cron 작업을 실행하여 큐가 결코 비어서 실행되지 않도록하십시오.