마스터-슬레이브 관계를 생성할 때 서버 가동 중지 시간을 방지하는 방법은 무엇입니까?

마스터-슬레이브 관계를 생성할 때 서버 가동 중지 시간을 방지하는 방법은 무엇입니까?

MySQL 마스터-슬레이브 또는 마스터-마스터 관계 설정을 준비 중입니다. 현재 저는 단일 MySQL 프로덕션 서버를 갖고 있으며, 물론 슬레이브를 연결하는 동안 가동 중지 시간이 많이 발생하는 것을 원하지 않습니다.

빈 슬레이브를 연결하고 마스터의 데이터가 동일해질 때까지 "천천히" 동기화하도록 할 수 있는 방법이 없나요?

나는 마스터에서 mysqldump를 사용하여 트랜잭션 덤프를 가져온 다음 이를 슬레이브로 가져올 수 있다는 것을 알았습니다. 그러나 슬레이브가 덤프를 가져올 때쯤에는 많은 새로운 행이 기록될 것이며 슬레이브는 이를 어떻게 얻을 것입니까? ?

여기서 분명한 것을 놓치고 있기를 바라지만, 광범위한 인터넷 검색을 통해 "이렇게 하면 향후 가동 중지 시간이 줄어들 것이므로 현재 가동 중지 시간이 그다지 나쁜 것은 아닐 수도 있습니다."와 같은 조언을 제공합니다. 하지만 저는 그런 일은 정말 피하고 싶습니다.

관련된MyISAM에 대한 질문, 하지만 저는 InnoDB를 사용합니다.

답변1

100% InnoDB를 사용하고 있다면 운이 좋을 것입니다. 당신이 사용할 수있는엑스트라백업다운타임이나 테이블 잠금 없이 마스터 데이터베이스의 전체 백업을 수행합니다. 이는 FLUSH TABLES WITH READ LOCK또는 옵션을 수행할 때 얻는 정렬과 동일한 일관된 스냅샷 스타일 백업이 됩니다 --master-data.

XtraBackup 도구는 또한 슬레이브에서 복제를 시작하는 데 필요한 MASTER_LOG_POS 및 MASTER_LOG_FILE 정보가 포함된 백업 디렉터리에 추가 파일을 삭제합니다.

백업이 완료되면 --prepare백업에서 XtraBackup 옵션을 실행하고 이를 슬레이브에 로드한 다음 슬레이브 MySQL 프로세스 백업을 시작하고 필요한 새 MASTER_LOG_POS 및 MASTER_LOG_FILE 값을 알려주어야 합니다.

skip-slave-start슬레이브를 시작하기 전에 my.cnf를 원할 것입니다 .

또한 mysql스키마는 기본적으로 MyISAM이므로(메모리가 올바르게 작동하는 경우 MyISAM만 가능함) 백업을 실행하는 동안 해당 테이블을 변경하지 않도록 주의해야 합니다. 해당 규칙을 고수하는 한 마스터 정보는 여전히 정확합니다.

종종 다음을 수행하는 것이 좋습니다.mysqlmy.cnf의 스키마를 무시하십시오 .슬레이브에서는 SELECT 권한이 있는 사용자만 생성합니다. 일관성이 없고 동기화되지 않은 슬레이브는 Percona(및 그 이전의 Maatkit)가 제공하는 도구를 사용하는 경우에도 감지하기 어렵고 처리하기가 어렵습니다.

편집하다:

InnoDB를 사용한다고 하셨지만, 완전성을 위해 MyISAM 테이블을 사용하는 경우에는 다른 방법이 있습니다. 스냅샷 기능이 있는 볼륨 관리자가 있는 경우(예:ZFS또는LVM) FLUSH TABLES WITH READ LOCK다음에 a 를 실행하고 SHOW MASTER STATUS, 스냅샷을 생성하고, 실행할 수 있습니다 UNLOCK TABLES. 가동 중지 시간은 상당히 최소화되어야 합니다. 비교를 위해 지난 밤에 데이터베이스 중 하나를 백업하기 위해 이 작업을 수행한 cron 작업은 데이터베이스가 "다운"된 비트인 스냅샷을 생성하는 데 6초가 걸렸고 스냅샷에서 백업 서버로 파일을 복사하는 데 27분이 걸렸습니다.

답변2

"처음부터" mysql 복제를 시작할 수 없습니다.

--master-data=2대신, 데이터베이스를 덤프할 때 매개변수 와 함께 mysqldump를 사용할 수 있습니다 . 즉, 다음과 같습니다:

mysqldump --master-data=2 --all-databases --opt -p > myinitialdump.sql

이 명령은 덤프 중에 영향을 받는 데이터베이스 내의 모든 테이블을 잠그고 다음과 같이 주석 처리된 방식으로 복제 좌표를 덤프 헤더에 씁니다.

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000018', MASTER_LOG_POS=106;

가져오기가 완료된 후 마스터의 호스트 이름과 인증 데이터를 추가하여 "change master to" 명령을 수동으로 실행할 수 있습니다. 복제는 덤프 지점에서 시작됩니다.

mysqldump 프로세스는 잠금 경합으로 인해 자체적으로 "다운타임"이 발생한다는 점을 명심하십시오. 전체 덤프 기간 동안 FLUSH TABLES WITH READ LOCK 명령이 수행하는 것과 유사하게 모든 테이블에 읽기 잠금을 설정합니다. 따라서 덤프가 완료되지 않으면 테이블에 대한 쓰기 요청이 반환되지 않습니다. 또한 쓰기 요청은 별도로 지정하지 않는 한 후속 읽기 요청도 차단할 수 있습니다.낮은 우선순위_업데이트MySQL 구성에서 또는 덤프 전에 SET GLOBAL LOW_PRIORITY_UPDATES=1을 발행했습니다.

관련 정보