동기 화 및 비동기 화 된 MySQL 마스터 복사 설정 을 깊이 분석 합 니 다.
1.MySQL 주종 복제 원리
여기 서 MySQL 5.5 를 예 로 들 어 MySQL 의 주종 복제 원 리 를 말씀 드 리 겠 습 니 다.
먼저 예비 노드 의 I/O 스 레 드 가 메 인 노드 에 데 이 터 를 요청 하고 메 인 노드 검증 이 통과 되면 dump 스 레 드 가 데 이 터 를 예비 노드 에 보 냅 니 다.예비 노드 의 I/O 스 레 드 는 자원 을 받 은 후에 이 데 이 터 를 중계 로그 에 기록 합 니 다.예비 노드 의 SQL 스 레 드 는 중계 로그 가 변 경 된 것 을 감지 하면 바로 중계 로그 의 내용 과 새로운 준비 라 이브 러 리 의 내용 에 따라 작 동 합 니 다.이렇게 해서 동기 화 과정 을 완성 했다.
2.흔히 볼 수 있 는 복제 모델
1.메 인 모델
이런 구조의 장점 은 비교적 간단 하고 구축 과 유지 가 비교적 쉬 우 며 원가 도 비교적 낮다 는 것 이다.일부 부 하 량 이 특별히 크 지 않 고 신뢰성 요구 가 특별히 높 지 않 은 경우 에는 이런 모델 을 충분히 사용 할 수 있다.그러나 일부 부하 가 비교적 큰 사이트 와 가용성 에 대한 요구 가 비교적 높 은 경우 이런 구 조 는 그다지 적용 되 지 않 는 다.만약 에 방 문 량 이 비교적 많 으 면 Master 노드 의 압력 이 비교 되 고 Master 가 무 너 지면 업무 가 종 료 될 수 있 기 때문이다.
2.한 주 는 주로 모델 에서
절대 다수의 장면 에서 우리 의 응용 은 모두 읽 고 많이 쓴다.우 리 는 이러한 구 조 를 사용 하여 읽 기와 쓰기 가 분 리 된 기술 을 통 해 Master 에서 읽 는 압력 을 효과적으로 낮 출 수 있다.우 리 는 백 엔 드 슬 레이 브 에서 데이터 백업,데이터 발굴 등 을 할 수 있 습 니 다.그러나 라 이브 러 리 가 비교적 많 고 메 인 라 이브 러 리 가 다른 요 구 를 책임 져 야 할 때 메 인 라 이브 러 리 의 압력 이 현저히 커진다.이때 메 인 라 이브 러 리 는 전체 시스템 의 성능 병목 이 될 것 이다.
물론 다른 복제 모델 도 있다.예 를 들 어 다단 계 중계,링 복사 등 이다.이런 복제 의 기본 원 리 는 모두 위의 것 과 차이 가 많 지 않 고 여기 서 더 이상 상세 하 게 설명 하지 않 는 다.
3.마스터 복사 설정
(1)비동기 복사
주종 동기 화 조건:
Master:
a:바 이 너 리 로 그 를 사용 합 니 다.
b:server-id 선택
c:복사 권한 이 있 는 사용 자 를 만 듭 니 다.
Slave:
a:중계 로그 사용 하기
b:유일한 server-id 선택
c:메 인 서버 에 연결 하고 데 이 터 를 복사 하기 시작 합 니 다.
A.우선 메 인 라 이브 러 리 에 복사 할 최소 권한 을 가 진 사용 자 를 만 듭 니 다.
mysql> grant replication slave,replication client on *.* to repl@'10.12.%'
-> identified by '123456';
Query OK, 0 rows affected (0.03 sec)
B、라 이브 러 리 에서 메 인 라 이브 러 리 연결
mysql> CHANGE MASTER TO MASTER_HOST='10.12.128.19',MASTER_PORT=3306,MASTER_USER='repl',
MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=451;
#
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.12.128.19
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000006
Read_Master_Log_Pos: 1512
Relay_Log_File: relay_index.000002
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000006
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1512
Relay_Log_Space: 452
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 3306
Master_UUID: 97f33396-ed12-11e4-921a-000c29e8ee06
Master_Info_File: /mydata/data5.6/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)
C.그리고 라 이브 러 리 에서 실행:
#
mysql> start slave;
IO 스 레 드 와 SQL 스 레 드 를 따로 시작 할 수도 있 습 니 다.(라 이브 러 리 의 IO 스 레 드 상태 가 connecting 상태 라면 방화벽 의 원인 일 수 있 습 니 다.일반적으로 방화벽 을 닫 거나 방화벽 규칙 을 설정 하면 됩 니 다)
(2)반 동기 복제
세 미 동기 복 제 는 Google 이 MySQL 을 위해 개발 한 세 미 동기 복 제 를 기반 으로 한 플러그 인 입 니 다.반 동기 복제 의 원 리 는 하나의 업무 가 메 인 서버 에서 실 행 된 후에 적어도 한 대의 서버 에서 실 행 된 후에 야 사 무 를 제출 하 는 데 성공 하 는 것 이다.일정 시간 내 에 서버 에서 응답 하지 않 으 면 자동 으로 비동기 복사 로 강 등 됩 니 다.
이 반 동기 복 제 는 비동기 복 제 를 바탕 으로 진행 된다.
우선 Google 의 세 미 동기 화 플러그 인 을 설치 해 야 합 니 다.
master:
install plugin rpl_semi_sync_master soname 'semisync_master.so';
slave:
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
그리고 반 동기 화 기능 을 켜 주세요.master:
set global rpl_semi_sync_master_enabled = 1;
set global rpl_semi_sync_master_timeout = 100; //
slave:
set global rpl_semi_sync_slave_enabled = ON;
라 이브 러 리 에서 IO 스 레 드 를 다시 시작 해 야 합 니 다:
stop slave IO_thread;
start slave IO_thread;
각각 메 인 라 이브 러 리 와 예비 라 이브 러 리 에서 동기 화 플러그 인 이 실행 중인 상 태 를 봅 니 다.
mysql> show global status like 'rpl%';
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 1 |
| Rpl_semi_sync_master_net_avg_wait_time | 0 |
| Rpl_semi_sync_master_net_wait_time | 0 |
| Rpl_semi_sync_master_net_waits | 0 |
| Rpl_semi_sync_master_no_times | 1 |
| Rpl_semi_sync_master_no_tx | 8 |
| Rpl_semi_sync_master_status | ON |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 0 |
| Rpl_semi_sync_master_tx_wait_time | 0 |
| Rpl_semi_sync_master_tx_waits | 0 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 0 |
+--------------------------------------------+-------+
14 rows in set (0.04 sec)
mysql> show global status like 'rpl%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON |
+----------------------------+-------+
1 row in set (0.04 sec)
메 인 라 이브 러 리 와 라 이브 러 리 의 반 동기 화 플러그 인 이 모두 사용 되 고 있 음 을 볼 수 있 습 니 다.이로써 비동기 주종 설정 이 끝 났 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Redash를 사용할 때 몰랐던 SQL을 쓰는 법을 배웠습니다.최근 redash에서 sql을 쓸 기회가 많고, 이런 쓰는 방법이 있었는지와 sql에 대해 공부를 다시하고 있기 때문에 배운 것을 여기에 씁니다. Redash란? 월별로 데이터를 표시하고 싶습니다 주별로 데이터를 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.