동기 화 및 비동기 화 된 MySQL 마스터 복사 설정 을 깊이 분석 합 니 다.

7366 단어 MySQL마스터 복사
쉽게 말 하면 MySQL 의 주종 복 제 는 C/S 구조의 응용 이다.master 는 우리 가 일반적으로 생각 하 는 server 라 고 생각 할 수 있 습 니 다.slave 는 client 라 고 생각 할 수 있 습 니 다.slave 의 I/O 스 레 드 는 master 에 데 이 터 를 요청 하고 master 는 slave 의 정 보 를 통 해 slave 접속 을 허용 한 다음 데이터 변화 정 보 를 보 냅 니 다.
1.MySQL 주종 복제 원리
여기 서 MySQL 5.5 를 예 로 들 어 MySQL 의 주종 복제 원 리 를 말씀 드 리 겠 습 니 다.
20151218173011422.jpg (357×306)
먼저 예비 노드 의 I/O 스 레 드 가 메 인 노드 에 데 이 터 를 요청 하고 메 인 노드 검증 이 통과 되면 dump 스 레 드 가 데 이 터 를 예비 노드 에 보 냅 니 다.예비 노드 의 I/O 스 레 드 는 자원 을 받 은 후에 이 데 이 터 를 중계 로그 에 기록 합 니 다.예비 노드 의 SQL 스 레 드 는 중계 로그 가 변 경 된 것 을 감지 하면 바로 중계 로그 의 내용 과 새로운 준비 라 이브 러 리 의 내용 에 따라 작 동 합 니 다.이렇게 해서 동기 화 과정 을 완성 했다.
2.흔히 볼 수 있 는 복제 모델
1.메 인 모델
20151218173031597.jpg (285×133)
이런 구조의 장점 은 비교적 간단 하고 구축 과 유지 가 비교적 쉬 우 며 원가 도 비교적 낮다 는 것 이다.일부 부 하 량 이 특별히 크 지 않 고 신뢰성 요구 가 특별히 높 지 않 은 경우 에는 이런 모델 을 충분히 사용 할 수 있다.그러나 일부 부하 가 비교적 큰 사이트 와 가용성 에 대한 요구 가 비교적 높 은 경우 이런 구 조 는 그다지 적용 되 지 않 는 다.만약 에 방 문 량 이 비교적 많 으 면 Master 노드 의 압력 이 비교 되 고 Master 가 무 너 지면 업무 가 종 료 될 수 있 기 때문이다.
2.한 주 는 주로 모델 에서
20151218173048976.jpg (395×314)
절대 다수의 장면 에서 우리 의 응용 은 모두 읽 고 많이 쓴다.우 리 는 이러한 구 조 를 사용 하여 읽 기와 쓰기 가 분 리 된 기술 을 통 해 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)
메 인 라 이브 러 리 와 라 이브 러 리 의 반 동기 화 플러그 인 이 모두 사용 되 고 있 음 을 볼 수 있 습 니 다.
이로써 비동기 주종 설정 이 끝 났 습 니 다.

좋은 웹페이지 즐겨찾기