간략한 소개
소위 "이중 마스터 복제"는 실제로 "상호 마스터-슬레이브 복제"입니다. 즉, 각 마스터 호스트에는 마스터 역할과 슬레이브 역할이 모두 있습니다. 이러한 방식으로 모든 당사자가 변경 한 내용은 마스터와 슬레이브를 통해 다른 호스트의 데이터베이스에 복제되어 데이터 일관성을 유지합니다. 이것이 "이중 마스터 복제"입니다.
데이터베이스 복제에는 두 가지 방법이 있습니다.
* GTID 기반 복제 * 바이너리 로그 위치 기반 복제
이 기사에서 논의 된 후자는 "바이너리 로그 위치 기반 복제"이지만 "GTID 기반 복제"가 더 나은 선택 일 수 있습니다.
시스템 환경
속성 | 매개 변수 |
---|---|
운영 체제 : | CentOS Linux 릴리스 7.4.1708 (코어) |
소프트웨어 버전: | MySQL 5.6.45 |
인터넷 정보 : | master-01 : 10.10.50.115 |
master-02 : 10.10.50.116 |
첫 번째 단계는 데이터베이스 서비스를 설치하는 것입니다.
MySQL 5.6 (CentOS 7) 참고 사항을 참조하고 자세한 프로세스를 건너 뜁니다.
구성 서비스
# master-01에서
#! / bin / sh ######################################## ## ################################ # (0) 필요한 디렉토리 생성 : ##### ### ######################################### ####### ################# mkdir -pv / var / log / mysql / chown mysql.mysql / var / log / mysql / #### ######## ##################################### ############ ############# # (1) /etc/mysql/my.cnf 파일 수정 : #! ! ! 배포판마다 구성 위치가 다르므로 복사하지 마십시오! 복사하지 마세요! 복사하지 마세요! ################################################# ######################## mv /etc/mysql/my.cnf /etc/mysql/my.cnf.backup cat << MYCNF >> /etc/mysql/my.cnf [mysqld] server_id = 1 자동 증가 오프셋 = 1 자동 증가 증가 = 2 log_bin = /var/log/mysql/mysql-bin.log log_bin_index = /var/log/mysql/mysql-bin.log.index relay_log = / var / log / mysql / mysql-relay-bin relay_log_index = / var / log /mysql/mysql-relay-bin.index expire_logs_days = 10 max_binlog_size = 100M log_slave_updates = 1 # 상황에 따라 수정 : # bind-address = xxxx MYCNF ################# # ############################################ ### ######## # (2) 서비스 다시 시작 : ############################ ##### ####################################### systemctl restart mysqld.service
# master-02에서
#! / bin / sh ######################################## ## ################################ # (0) 필요한 디렉토리 생성 : ##### ### ######################################### ####### ################# mkdir -pv / var / log / mysql / chown mysql.mysql / var / log / mysql / #### ######## ##################################### ############ ############# # (1) /etc/mysql/my.cnf 파일 수정 : #! ! ! 배포판마다 구성 위치가 다르므로 복사하지 마십시오! 복사하지 마세요! 복사하지 마세요! ################################################# ######################## mv /etc/mysql/my.cnf /etc/mysql/my.cnf.backup cat << MYCNF >> /etc/mysql/my.cnf [mysqld] # server_id 매개 변수를 지정합니다. 두 데이터베이스는 서로 달라야합니다. server_id = 2 # 2부터 시작하여 현재 데이터베이스의 ID의 초기 값을 지정하고, 두 개의 주요 라이브러리 의 자동 증가 ID 충돌을 방지하기 위해 auto-increment-increment와 협력합니다. #이 라이브러리 의 자동 증가 ID 는 짝수입니다. , 다른 라이브러리 의 자동 증가 ID는 모두 홀수입니다. auto-increment-offset = 2 auto-increment-increment = 2 # 이진 로그 파일 및 색인 파일 # 색인 파일에는 모든 이진 로그 파일의 목록이 포함됩니다. log_bin = / var / log / mysql / mysql-bin .log log_bin_index = /var/log/mysql/mysql-bin.log.index # 바이너리 로그 만료 시간 expire_logs_days = 10 # 바이너리 로그의 최대 크기 max_binlog_size = 100M # 업데이트 실행 라이브러리의 SQL 스레드에 의해 자체 바이너리 로그를 작성합니다. # https://dba.stackexchange.com/questions/169071/do-log-slave-updates-in-mysql-5-7-fail-the-replication-in-linux?noredirect=1&lq=1 log_slave_updates = 1 # 릴레이 로그 파일 및 색인 파일 # 색인 파일에는 모든 릴레이 로그 파일 목록이 포함됩니다. relay_log = / var / log / mysql / mysql-relay-bin relay_log_index = /var/log/mysql/mysql-relay-bin.index # 상황에 따라 수정 : # bind-address = xxxx MYCNF #################### # ############################################ ### ##### # (2) 서비스 다시 시작 : ############################## ##### ##################################### systemctl restart mysqld. service
복제를위한 사용자 생성
master-01 및 master-02에서 각각 복제 할 사용자를 만듭니다. 사용자를 만든 후에는 사용자가 정상적으로 로그인 할 수 있는지 확인하는 것을 잊지 마십시오.
# master-01에서
GRANT REPLICATION SLAVE ON *. * TO 'replication'@ '%'TO 'BU3CGK6x';
# master-02에서
GRANT REPLICATION SLAVE ON *. * TO 'replication'@ '%'TO 'BU3CGK6x';
복제 활성화
master-01 및 master-02에서 각각 복제를 활성화합니다.
# master-01에서
-SQL- SLAVE 중지; 마스터를 master_host = '10 .10.50.116 ', master_port = 3306, master_user ='replication ', master_password ='BU3CGK6x ', master_log_file ='mysql-bin.000001 ', master_log_pos = 0으로 변경하십시오. 노예를 시작하십시오;
# master-02에서
-SQL- SLAVE 중지; 마스터를 master_host = '10 .10.50.115 ', master_port = 3306, master_user ='replication ', master_password ='BU3CGK6x ', master_log_file ='mysql-bin.000001 ', master_log_pos = 0으로 변경하십시오. 노예를 시작하십시오;
지침
1) 숫자를 사용하는 경우 따옴표를 사용하지 마십시오. 예를 들어 master_port = '3306'은 구문 오류를 발생시킵니다.
복사 확인
확인 프로세스는 여기에 자세히 설명되어 있지 않습니다. 비교적 간단하기 때문에 다음은 사본이 작동하는지 확인하는 아이디어에 대한 개요 일뿐입니다.
master-01에서 라이브러리와 테이블을 만든 다음 master-02에서 확인합니다. master-02에서 라이브러리와 테이블을 만든 다음 master-01에서 확인합니다.
문제가 없으면 문제가 없습니다. 동기화가없는 경우 데이터베이스에서 SHOW SLAVE STATUS \ G 문 을 실행 하여 동기화 상태 및 동기화 오류 정보 (있는 경우)를 볼 수 있습니다.
상태 확인
사용 SHOW 마스터 STATUS \ G의 문은 자신의 상태를 확인하기 위해, 사용 SHOW 노예 상태 \ G의 문을 노예로 자신의 상태를 볼 수;
관련 기사
"MySQL"-이중 마스터 복제 (GTID 기반 복제)
"MySQL"-설정 마스터-슬레이브 복제 (위치 기반 복제)
"MySQL"-설정 마스터-슬레이브 복제 (GTID 기반 복제)
참조
마스터-마스터 MySQL 데이터베이스 복제 구성
MariaDB / 릴레이 로그
MySQL 5.7의 Log_Slave_Updates가 Linux에서 복제에 실패합니까?