가동 중지 시간을 최소화하면서 MySQL 복제를 설정하는 방법


12

기본적으로 우리는 큰 MySQL 데이터베이스를 가지고 있으며 슬레이브 (마스터 슬레이브 설정)에 복제하려고합니다. 데이터베이스에서 MINIMAL 다운 타임으로이를 수행하는 방법에 대한 단계별 가이드가 있습니까? 데이터베이스를 백업하고 백업을 슬레이브 서버 (개인 네트워크를 통해서도)로 전송하는 데 40 분 정도 걸립니다. 상당히 긴 다운 타임.

답변:


15

InnoDB를 스토리지 엔진으로 사용한다고 가정합니다. 그렇다면 bin-logging 을 켜야합니다 . 지금 켜져 있지 않으면 my.cnf를 수정 한 후 MySQL을 다시 시작해야합니다. 다운 타임만으로 데이터베이스를 차단하지 않고 binlog 위치로 데이터베이스를 덤프 할 수 있습니다.

mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 -A

이 백업을 기반으로 슬레이브에서 데이터를 복원하십시오. 이 후에는 MySQL 복제 자습서 를 따라 슬레이브가 마스터와 함께 따라 잡거나 실행할 수 있습니다.


일부 테이블에서 innodb를 사용하지 않으면 어떻게됩니까? --databases를 사용하여 -A 대신 데이터베이스의 하위 집합을 덤프하면 위의 백업이 여전히 유효합니까?
mathieu

일부 테이블이 innodb를 사용하지 않으면 백업이 일치하지 않을 수 있습니다. 여기를 참조하십시오 : stackoverflow.com/a/7461466/104398 ; 백업에는 건너 뛴 데이터베이스가 포함되지 않습니다. 이러한 백업을 기반으로 복제를 설정하고 복제 된 내용을 필터링하지 않으면 생략 된 데이터베이스에서 작업이 수행되는 즉시 복제가 중단됩니다.
pQd

좋아, 나머지 myisam 테이블을 innodb로 변환하고 원하는 데이터베이스 만 복제 / 백업했는지 확인했습니다.
mathieu

3

복제를 시작하려면 슬레이브에 일관된 데이터베이스 사본이 필요합니다

myisam 또는 innodb 테이블이 지원됩니까? 문제를 찾기 위해

show table status

'엔진'열을보십시오

모든 테이블이 innodb 인 경우 mysqldump --single-transaction을 사용하고 슬레이브로 가져 오기를 사용하여 가동 중지 시간을 0으로 설정할 수 있습니다

테이블이 myisam 인 경우 테이블을 복사하는 동안 쓰기 위해 테이블을 잠글 때 다운 타임이 발생해야합니다. mysqlhotcopy는이를 도와주는 도구입니다.

또는 LVM (논리 볼륨 관리자)을 사용하는 경우 데이터베이스를 중지하고 몇 초 안에 LVM 스냅 샷을 작성한 다음 db를 다시 시작할 수 있습니다. 그런 다음 스냅 샷에서 일관된 사본을 만들 수 있습니다.


1

슬레이브를 설정하려면 데이터 스냅 샷을 생성하고 이진 로그 위치를 기록해야합니다. 데이터베이스를 백업하면 성능이 저하 되더라도 다운 타임이 발생하지 않아야하지만 이미 데이터베이스를 백업하고 있습니까? 백업에서 일부 테이블을 잠글 필요가있을 수 있으며 이로 인해 애플리케이션이 잠길 수 있으므로 실제로 어떻게 구현되는지 살펴 봐야합니다.

디스크를 스냅 샷 할 수 있습니까? 핫 백업을 수행 할 수 있으면 가동 중지 시간이 상당히 줄어 듭니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.