답변:
설계 상 하나의 mysqld 프로세스는 동시에 두 개의 다른 마스터를 청취 할 수 없습니다.
CHANGE MASTER TO 명령은 하나의 마스터를 읽을 소스로만 설정할 수 있습니다.
이것을 흉내 내려면 두 마스터 사이를 프로그래밍 방식으로 바꿔야합니다. 어떻게합니까?
StackOverflow에서 각 마스터가 랩톱이고 슬레이브가 중앙 컴퓨터 인 다른 마스터에 슬레이브를 수동으로 연결하는 방법을 설명했습니다.
기본 아이디어는 다음과 같습니다
이와 같이 M1을 S1로 복제 한 다음 M2를 S1으로 복제 설정
한 마스터에서 다른 마스터로 전환 할 때마다 두 개의 값을 기록해야합니다. SHOW SLAVE STATUS\G
이 두 값은 마스터에서 왔으며 슬레이브에서 다음에 실행될 마지막 SQL 문을 나타냅니다.
한 가지 중요한주의 사항이 있습니다. M1과 M2가 상호 배타적 인 데이터베이스를 업데이트하는 한이 알고리즘은 괜찮습니다.
롤란도의 솔루션에는 많은 경고가 있습니다. 첫 번째 복제본 스트림은 반드시 복제하지 않아도되고 다른 복제본 스트림은 복제되지 않습니다. 이것은 슬레이브가 동기화되지 않은 시간을 당신에게 줄 것입니다. 이제 "턴"이있을 때 각각을 따라 잡을 수있는 충분한 시간을 확보하기 위해 섬세한 균형 조정을해야합니다.
설명한대로 다시 전환하려면 로그 위치의 북 키퍼를 재생해야합니다. 이것은 실제로 버그가있는 것처럼 보이며, 누락되거나 일관성이없는 데이터의 창을 열거 나 잘못되었을 때 복제를 중단합니다 (로그 위치의 '하나의 꺼짐'오류로 인해 발생)
여러 개의 MySQL 인스턴스를 실행하는 것이 좋습니다. 동일한 머신에서 둘 이상의 mysql을 실행하는 것을 막을 수는 없습니다. 물론 동일한 포트에서 작동 할 수는 없습니다. 모든 클라이언트와 라이브러리가 3306 이외의 것을 지정할 수 있기 때문에 이것이 실제로 문제라고 생각하지 않습니다.
port = 3307 (또는 .cnf 파일 중 하나에있는 것) 만 지정하십시오.
개별적으로 구성된 버퍼 풀과 다른 메모리 구성이 서로 상충되지 않도록주의해야합니다. 실제로 복제중인 개별 데이터베이스의 특정 요구 사항에 맞게 해당 설정을 조정할 수 있기 때문에 이점이 있습니다.
이 방법으로 동일한 서버에서 두 개의 복제 스트림을 실행할 수 있습니다. 결코 뒤에, 책 유지가 필요하지 않습니다, "스와핑"스크립트가 필요하지 않습니다.
팬인 (다중 소스 복제)은 MySQL 5.7에서 지원됩니다.
랩 릴리스는 http://labs.mysql.com/에서 제공됩니다.
MySql을 대체 할 수있는 MariaDB를 사용할 수 있습니다. 버전 10.2부터 지원합니다
Mysql 5.7 지원의 문제점은 GTID가 필요하다는 것이다. 즉, MariaDb의 경우에는 마스터가 변경되어야한다는 것을 의미한다.
예 / HowTo 링크 : http://www.skysql.com/blogs/dean-ellis/multi-source-replication-mariadb-100