"MySQL"-이중 마스터 복제 (위치 기반 복제) @ 20210224

간략한 소개

소위 "이중 마스터 복제"는 실제로 "상호 마스터-슬레이브 복제"입니다. 즉, 각 마스터 호스트에는 마스터 역할과 슬레이브 역할이 모두 있습니다. 이러한 방식으로 모든 당사자가 변경 한 내용은 마스터와 슬레이브를 통해 다른 호스트의 데이터베이스에 복제되어 데이터 일관성을 유지합니다. 이것이 "이중 마스터 복제"입니다.

데이터베이스 복제에는 두 가지 방법이 있습니다.

	* 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에서 복제에 실패합니까?

추천

출처blog.csdn.net/u013670453/article/details/114025812