두 서버 모두에서 마스터/마스터 복제를 자동으로 설정 및 구성합니다.

두 서버 모두에서 마스터/마스터 복제를 자동으로 설정 및 구성합니다.

저는 두 서버 간의 MySQL 복제(마스터/마스터 복제) 구성을 자동화하는 스크립트를 작성 중이며 MySQL 관련 조언을 찾고 있습니다.

목표는 기본적으로 두 서버 모두에서 동일한 스크립트가 실행되도록 허용하고(아마도 다른 마스터 서버의 IP를 묻는 메시지만 표시) MySQL을 완전히 구성하도록 하는 것입니다. 대부분은 매우 간단하지만 일부 구성 값은 서버마다 고유합니다. 서버는 거의 동일합니다(MySQL 자격 증명 포함).

이것/etc/my.cnf파일에는 두 개의 서버별 설정이 있으며 그 중 하나는 다음과 같습니다.서버ID그리고자동 증분 오프셋.

~이든서버ID순서에 상관없이 시작해야 합니까, 아니면 연속적으로 시작해야 합니까? 그렇지 않은 경우에는 서버 호스트 이름(예 appdb-stg-m01: 고유하므로 01 또는 임의의 숫자를 얻을 수 있음) 에서 숫자 값을 가져오거나 서버 IP 주소의 마지막 옥텟까지 가져오려고 합니다 . 충분한?

그래서자동 증분 오프셋, 이 두 서버의 설정이 동일할 수는 없나요? 나는 그것을1첫 번째 마스터에서2또 다른. 일부 온라인 튜토리얼에서 이러한 값을 얻었지만 왜 다른지 설명하지 않았습니다.

그런 다음마스터를 다음으로 변경하세요.명령...걸린다메인 로그 파일그리고MASTER_LOG_POS...

이러한 서버는 비교적 새로운 서버이고 기존 데이터베이스가 없다고 가정할 수 있습니다. 그래서 그냥 재설정하려고 생각했어요메인 로그 파일도착하다mysql-bin.000001충분하지만 ID를 삭제해야 합니다.mysql-bin. ?~에서/var/lib/mysql, 그리고 에서/var/lib/mysql/mysql-bin.index. 이것이 충분하나요?

내가 약간 매달린 유일한 다른 설정은MASTER_LOG_POS...직접 설정할 수 있는 방법이 있나요? 나는 이 프로세스를 가능한 한 간단하게 유지하려고 노력하고 있으므로 다른 mysql 서버에 연결하여 출력을 보는 것은 SHOW MASTER STATUS멀리하고 싶습니다. 재설정할 수 있는 방법이 있나요?313?

감사해요!

답변1

댓글을 남기려고 했는데 답변이 너무 길어지기 시작했습니다.

MySQL 마스터-마스터 관계에 대해 염두에 두어야 할 일반적인 아이디어는 복제 노력의 경우 이제 두 대의 서버가 동시에 또는 서로 다른 시간에 동일한 레코드를 작성한다는 것입니다.

그러니 이 점을 명심하세요.자동 증분 오프셋달라야 함 - 1과 2여야 함 왜냐하면아이디어는 서로 다른 레코드 번호를 생성하는 것입니다(즉, 충돌 없음). 따라서 마스터 중 한 명이 생성한 레코드는 짝수이고 다른 마스터가 생성한 레코드는 홀수이므로 동시에 충돌하는 레코드 번호를 생성할 수 없습니다. 예를 들어 첫 번째 마스터는 레코드 1,3,5,7 등을 생성하고 두 번째 마스터는 레코드 2,4,6,8...을 생성합니다.

서버 ID에 관해서는 서로 달라야 합니다. 전통적으로 사람들은 1과 2를 사용하지만 이것이 필수는 아닙니다. 나생각하다0이 될 수는 없습니다. 확실하지 않습니다.

마지막으로 MASTER_LOG_FILE 및 MASTER_LOG_POS의 경우 기본값을 사용하려고 시도할 수 있지만 상황을 가정하는 것은 결코 최선의 생각이 아니며 더 중요한 것은 이벤트가 발생하면 경로를 재사용하여 마스터-마스터 관계를 다시 설정하는 것이 좋습니다. 발생하므로 코드부터 시작하세요. 이름을 재사용하면 원격 MySQL에 연결하여 올바른 값을 얻는 것이 더 유용할 것입니다.

자동화에 대한 또 다른 관점을 보려면 여기에서 Ansible 모듈 페이지에 대한 링크를 찾을 수 있습니다.mysql_copy

다음은 Ansible에 대한 단서를 제공할 수 있는 이전 답변입니다.PowerShell의 "일대다" 원격 기능에 해당하는 Linux

관련 정보