현재 복제된 2개의 슬레이브의 복제 방식을 변경하는 가장 좋은 방법은 무엇입니까?

현재 복제된 2개의 슬레이브의 복제 방식을 변경하는 가장 좋은 방법은 무엇입니까?

프로덕션 환경에서 MySQL 복제를 다음과 같이 설정했습니다.

DB1 -> DB2
DB1 -> BAK

DB2BAK의 노예는 어디에 있습니까 DB1? 3개의 서버가 모두 동기화되어 있고(마스터보다 0초 뒤쳐짐) 데이터가 30GB 이상입니다.

다음과 같이 서버를 새로운 마스터-슬레이브 구성으로 설정하고 싶습니다.

DB1 -> DB2 -> BAK

에서 마스터 호스트를 변경하는 가장 좋은 방법은 무엇입니까 BAK?

슬레이브 스레드를 중지하고 (5-6시간 프로세스) DB2mysqldump를 가져오는 것을 방지할 수 있는 방법이 있습니까 ?BAK

답변1

그들은 이것을 마스터-슬레이브-슬레이브 계단식 복제라고 부릅니다. DB2에서 log-bin 및 log-slave-updates를 활성화해야 합니다. 여기를 참조하세요.

http://dev.mysql.com/doc/refman/5.0/en/replication-options-slave.html#option_mysqld_log-slave-updates

BD2에서 실행되면 BAK에서 ​​마스터를 변경하고 슬레이브를 재설정하여 로그 정보를 플러시해야 합니다.

mysql> stop slave;
mysql> change master to MASTER_HOST="BAK name or IP", .....
mysql> reset slave;
mysql> start slave

'...' 옵션은 평소와 같이 다음과 같습니다.http://dev.mysql.com/doc/refman/5.0/en/change-master-to.html

이론적으로는 새 덤프를 만들고 가져올 필요 없이 이 작업을 수행해야 합니다. 로그를 가져오는 데 문제가 있는 경우를 대비해 마스터에서 로그 플러시를 실행하고 BAK를 백업해야 합니다. 위치가 잘못되었거나 그런 것...

답변2

당신이 말했듯이 덤프와 가져오기는 시간이 오래 걸릴 수 있습니다. 훨씬 더 나은 옵션은 다음을 사용하는 것입니다.xtrabackup, 파일을 제자리에 복사하는 속도만큼 빠르게 복원을 수행합니다.나는 그것에 대해 블로그를 썼다얼마 전에. 나는 이것이 정말 빠르고 쉽게 노예를 설정하는 완벽한 방법이라고 생각합니다. 백업은 시간이 오래 걸리지만 복원은 정말 빠릅니다. 나는 또한 당신이 사용하는 것을 강력히 권장합니다돼지백업을 압축하는 경우 gzip 대신 gzip을 사용하면 백업 시간이 4배나 차이가 납니다.

예를 들어 DB1을 일시적으로 중지하여 두 슬레이브를 동시에 중지하도록 구성할 수 있는 경우(둘 다 db1의 동일한 로그와 위치를 가리키도록), 필요 없이 마스터 정보를 사용하여 DB2에서 BAK를 안전하게 다시 지정할 수 있습니다. 복원을 수행하는 데 시간이 오래 걸립니다. troyengel이 말했듯이 가장 중요한 것은 릴레이를 수행하려면 로그 슬레이브 업데이트가 필요하다는 것입니다. 그렇지 않으면 DB2에서 시작된 명령문만 BAK로 전송됩니다.

또한 DB2를 읽기 전용으로 설정하는 것이 좋습니다. 이는 복제에 영향을 미치지 않지만 DB1에 없는 데이터가 DB2 및 BAK에 저장되지 않으므로 더 안전합니다.

관련 정보