2014-01-14 2 views
2

내가 2 databses의 X "생산"과 Y "테스트mysql 덤프 브레이크 복제가 가능합니까?

데이터베이스 X 구조에서 Y를 동일해야이있다. 그러나, 그렇지 않은 생산에 나는 화가 많은 변화 때문이다. 지금, 어떻게 든에 필요 수출 X는 내가 mysql을 덤프를 할 생각입니다

. 모든 복제를 파괴하지 않고 Y로 가져올하지만 난 확인이 질문을하고 이유가 리플리케이션 어떤 문제를 구분하지 않습니다.

여기에 따라야 할 단계가 있습니다.

  1. 백업 생산. (예 : mysqldump -u root -p --triggers --routines X> c : /Y.sql)
  2. 복원하십시오. (예 : mysql -u root -p Y < c : \ Y.sql)

이로 인해 복제에 문제가 발생합니까?

나는 덤프가 모든 것을 실행하고 그것을 bin 로그에 저장하고 슬레이브가 그것을 볼 수 있고 문제없이 복제 할 수 있다고 믿는다.

내가 정확히하려는 것은 맞습니까? 복제 문제가 발생합니까?

감사합니다.

답변

1

예, X에서 백업하고 Y로 복원하는 것은 정상적인 작동입니다. 우리는 종종 이것을 "노예를 다시 초기화"라고 부릅니다.

이렇게하면 복제가 중단됩니다. 슬레이브가 처리중인 변경 사항이 백업으로 표시된 데이터의 스냅 샷과 동기화되지 않았기 때문에 슬레이브가 변경 사항을 계속 적용하는 것과 동시에 데이터를 복원 할 수있는 확실한 방법은 없습니다. 변경된 데이터를 덮어 쓰거나 변경 사항을 놓칠 수 있습니다. 그러면 슬레이브가 완전히 동기화되지 않게됩니다.

따라서 복원하는 동안 슬레이브에서 복제를 중지해야합니다. 덤프는 덤프의 순간을 기준으로 작성된 바이너리 로그의 위치를 ​​포함하도록 마스터에서

  1. mysqldump는의 --master-data 옵션 : 여기

    은 전형적인 노예 재 초기화하는 단계입니다.
  2. 슬레이브에서 복제를 중지하십시오.
  3. 슬레이브에서 덤프를 복원하십시오.
  4. CHANGE MASTER을 사용하여 슬레이브가 시작하는 바이너리 로그 좌표를 변경하십시오. 덤프에 저장된 좌표를 사용하십시오.
  5. 슬레이브를 시작하십시오. 귀하의 코멘트를 다시

:

좋아, 난 당신이 더 나은 지금 무엇을 필요로하는지 알고 있습니다.

예, mysqldump --no-data에 대한 옵션이 있으므로 출력에는 CREATE TABLE 및 기타 DDL 만 포함되지만 데이터가있는 INSERT 문은 포함되지 않습니다. 그런 다음 동일한 서버의 별도 데이터베이스로 가져올 수 있습니다.그리고 당신 말이 맞습니다. 기본적으로 DDL 문은 바이너리 로그에 추가되므로 모든 복제 슬레이브는 자동으로 동일한 명령문을 실행합니다.

$ mysqladmin create newdatabase 
$ mysqldump --no-data olddatabase | mysql newdatabase 
+0

감사 빌 :

당신은 수출이 같은 두 단계 & 가져 오기를 할 수 있습니다. 나는 X와 Y가 동일한 서버에있는 데이터베이스라는 점에 대해 명확하지 않은 것으로 생각한다. 또한 X와 Y가 다른 서버에 복제 중입니다. 따라서 X = Y를 "최소한 테이블 정의"로 만들 필요가 있습니다. "테스트 할 데이터는 신경 쓰지 않습니다. 따라서 X에서 스키마를 내보내고 Y를 자르고 복제를 중단하지 않고 Y를 다시 만드는 방법이 있다면 행복 할 것입니다 – Mike