my sql 복사 원리 와 실천 응용 상세 설명

12091 단어 mysql복제 하 다.
본 논문 의 사례 는 my sql 복사 원리 와 실천 응용 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
복사 기능 은 my sql 데이터베이스 에 있 는 데 이 터 를 하나 이상 의 my sql 로 복원 하 는 것 입 니 다.
복사 원리:홈 서버 에서 실행 되 는 모든 DDL 과 DML 문 구 는 바 이 너 리 로그 에 기 록 됩 니 다.이 로 그 는 서버 에서 가 져 오고 라 이브 러 리 에서 복사 되 며 중계 로그 로 저 장 됩 니 다.
이 과정 은 IO 스 레 드 라 는 스 레 드 가 담당 하고 SQL 스 레 드 라 는 문 구 는 중계 로그 의 문 구 를 순서대로 실행 합 니 다.
복 제 는 여러 가지 토폴로지 형식 이 있다.
1.전통 적 인 복사,한 주 는 여러 서버 에서,한 주 서버 는 여러 서버 에서.
2.체인 복사,한 서버 는 메 인 라 이브 러 리 에서 복사 하고 다른 서버 는 이 복사,중간 서버 는 중계 메 인 라 이브 러 리 라 고도 합 니 다.
3.메 인 복사,두 메 인 라 이브 러 리 는 서로 기록 과 복 제 를 받 습 니 다.
4.다 원 복사,하 나 는 라 이브 러 리 에서,여러 개의 메 인 라 이브 러 리 에서 복사 합 니 다.
1.복 사 는 어떻게 조작 합 니까?
1.메 인 라 이브 러 리 에 바 이 너 리 로그 기록 을 사용 합 니 다.
2.메 인 라 이브 러 리 에 복사 사용 자 를 만 듭 니 다.
3,훈련 에서 유일한 server 설정id。
4.메 인 라 이브 러 리 에서 데 이 터 를 백업 합 니 다.
5.라 이브 러 리 에서 메 인 라 이브 러 리 백업 데 이 터 를 복원 합 니 다.
6.CHANGE MASTER TO 명령 을 집행 합 니 다.
7.복사 시작.
2.구체 적 인 조작 절 차 는 다음 과 같다.
1.메 인 라 이브 러 리 에서 바 이 너 리 로 그 를 사용 하고 server 를 설정 합 니 다.id。

#  server_id
server_id = 1
#  binlog  
log-bin = mysql-bin
2.메 인 라 이브 러 리 에 복사 사용 자 를 만 듭 니 다.

create user '   '@'%' identified by '  ';
grant replication slave on *.* to '   '@'%';
3、라 이브 러 리 에 server 설정id

#  server_id
server_id = 10
4.메 인 라 이브 러 리 의 데 이 터 를 백업 합 니 다.

mysqldump -u root -p --all-databases --routines --events --triggers --single-transaction --master-data >     
5.라 이브 러 리 에서 내 보 낸 데 이 터 를 복원 합 니 다.

mysql -u root -p -f <       .sql
6.창고 에서 CHANGE MASTER TO 명령 을 수행 합 니 다.

CHANGE MASTER TO 
MASTER_HOST='  IP',
MASTER_USER='      ',
MASTER_PASSWORD='  ',
MASTER_LOG_FILE='       ',
MASTER_LOG_POS=       ;
바 이 너 리 로그 이름과 바 이 너 리 로그 위 치 는 백업 메 인 라 이브 러 리 파일 에 포함 되 어 있 습 니 다.다음 과 같 습 니 다.

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000016', MASTER_LOG_POS=47845;
7.라 이브 러 리 에서 start slave 를 실행 하고 show slave status\\G;복사 상태 보기;
3.홈 복사 설정
메 인 라 이브 러 리 가 각각 master 1 과 master 2 라 고 가정 합 니 다.
1、master 2 를 읽 기 전용 으로 설정

set @@global.read_only = on;
2.master 2 에 복사 사용 자 를 만 들 고 존재 한다 면 만 들 지 않 아 도 됩 니 다.

create user '   '@'%' identified by '  ';
grant replication slave on *.* to '   '@'%';
3.master 2 가 바 이 너 리 로 그 를 열 었 는 지 확인 하고 master 2 의 바 이 너 리 로그 좌 표를 확인 합 니 다.

show master status;
4.두 번 째 정보 에 따라 master 1 에서 CHANGE MASTER TO 명령 을 수행 합 니 다.

CHANGE MASTER TO 
MASTER_HOST='MASTER2  IP',
MASTER_USER='MASTER2    ',
MASTER_PASSWORD='  ',
MASTER_LOG_FILE='       ',
MASTER_LOG_POS=       ;
5、master 1 에서 slave 모드 오픈

start slave;
6、master 2 를 읽 기와 쓰기 로 설정

set @@global.read_only = off;
4.다 원 복사 설정
server 3 를 server 1 과 server 2 의 라 이브 러 리 로 설정 합 니 다.
1.server 1 과 server 2 의 바 이 너 리 로그 와 server 를 설정 합 니 다.id,구체 적 인 조작 은 위 를 참고 할 수 있 습 니 다.
2.server 1 과 server 2 에 복사 사용 자 를 만 들 고 구체 적 인 작업 은 위 를 참고 할 수 있 습 니 다.
3、server 3 에 server 설정id。
4.server 1 과 server 2 의 데 이 터 를 백업 합 니 다.
5.server 3 에서 server 1 과 server 2 에 백업 한 데 이 터 를 복원 합 니 다.
6.server 3 에서 복사 저장 소 를 FILE 에서 TABLE 로 변경 합 니 다.

stop slave;
set global master_info_repository = 'TABLE';
set global relay_log_info_repository = 'TABLE';
 설정 파일 에서 수정 해 야 합 니 다:

[mysqld]
master-info-repository = TABLE
relay-log-info-repository = TABLE
7.server 3 에서 CHANGE MASTER TO 명령 을 실행 하고 채널 이름 을 명명 합 니 다.

CHANGE MASTER TO 
MASTER_HOST='server1  IP',
MASTER_USER='server1    ',
MASTER_PASSWORD='  ',
MASTER_LOG_FILE='server1       ',
MASTER_LOG_POS=server1        FOR CHANNEL 'server1';

CHANGE MASTER TO 
MASTER_HOST='server2  IP',
MASTER_USER='server2    ',
MASTER_PASSWORD='  ',
MASTER_LOG_FILE='server2       ',
MASTER_LOG_POS=server2        FOR CHANNEL 'server2';
8.server 3 에서 모든 채널 에 START SLAVE FOR CHANNEL 문 구 를 실행 합 니 다.

start slave for channel 'server1';
start slave for channel 'server2';
9.동기 화 상 태 를 보고 slave status\G 를 표시 합 니 다.
지정 한 채널 의 라 이브 러 리 상 태 를 가 져 오 려 면 show slave status for channel'채널 이름'\\G;
5.복사 필터 설정
어떤 표 나 데이터 베 이 스 를 복사 할 지 선택 할 수 있 습 니 다.메 인 라 이브 러 리 에 서 는-binlog-do-db 와-binlog-ignore-db 옵션 을 사용 하여 변경 할 데이터 베 이 스 를 기록 하여 바 이 너 리 로 그 를 제어 할 수 있 습 니 다.더 좋 은 방법 은 창고 에서 제어 하 는 것 이다.
1.지정 한 데이터베이스 복사

CHANGE REPLICATION FILTER REPLICATE_DO_DB = (db1, db2);
2.지정 표 복사

CHANGE REPLICATION FILTER REPLICATE_DO_TABLE = ('db1.table1');
3.마스크 를 사용 하여 표를 선택 하려 면

CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE = ('db1.tb_%');
4.데이터베이스 무시

CHANGE REPLICATION FILTER REPLICATE_IGNORE_DB = (db1, db2);
5.지정 표 무시

CHANGE REPLICATION FILTER REPLICATE_IGNORE_TABLE = ('db1.table1');
6.라 이브 러 리 에서 주 복사 에서 체인 복사 로 전환 합 니 다.
예 를 들 어 현재 서버 A 주 라 이브 러 리,서버 B 와 서버 C 는 라 이브 러 리 에서 서버 A 로 복사 된다.지금 서버 C 를 서버 B 의 라 이브 러 리 로 사용 하고 싶 습 니 다.
1.서버 C 에서 라 이브 러 리 실행 중지

stop slave;
show slave status\G;
Relay 기록 하기Master_Log_File 과 ExecMaster_Log_Pos 의 값
2.서버 B 에서 라 이브 러 리 실행 중지

stop slave;
show slave status\G;
Relay 기록 하기Master_Log_File 과 ExecMaster_Log_Pos 의 값
3.서버 B 의 로그 위 치 를 서버 C 와 비교 하여 어느 것 이 서버 A 의 최신 동기 화 인지 찾 습 니 다.보통 서버 C 는 라 이브 러 리 에서 실행 을 중단 하고 서버 B 의 로 그 는 더욱 앞 에 있 습 니 다.
4.서버 C 에서 START SLAVE UNTIL 문 구 를 사용 하여 서버 B 의 로그 위치 에 동기 화 합 니 다.

START SLAVE UNTIL MASTER_LOG_FILE='       B    ', MASTER_LOG_POS=       B    ;
5、서버 C 에서 show slave status 검사 중 Exec_Master_Log_Pos 와 Until_Log_Pos 둘 은 같 아야 합 니 다.
6.서버 B 에서 메 인 라 이브 러 리 상 태 를 확인 하고 라 이브 러 리 에서 시작 합 니 다.

show master status;
start slave;
show slave status\G;
7.서버 C 에서 라 이브 러 리 실행 을 중단 하고 CHANGE MASTER TO 명령 을 실행 합 니 다.

stop slave;
CHANGE MASTER TO
MASTER_HOST='   B IP',
MASTER_USER='   B    ',
MASTER_PASSWORD='  ',
MASTER_LOG_FILE='      show master status      ',
MASTER_LOG_POS=      show master status      ;
8.서버 C 에서 복사 시작 및 상태 확인

start slave;
show slave status\G;
7.체인 복사 에서 마스터 복사 로 전환
서버 A->서버 B->서버 C,서버 C 를 서버 A 의 라 이브 러 리 로 직접 사용 하려 면 어떻게 해 야 합 니까?
1.서버 B 에서 라 이브 러 리 실행 을 중단 하고 주 라 이브 러 리 상 태 를 기록 합 니 다.

stop slave;
show master status\G;
2.서버 C 에서 라 이브 러 리 지연 이 따라 잡 혔 는 지 확인,RelayMaster_Log_File 과 ExecMaster_Log_Pos 는 서버 B 의 메 인 라 이브 러 리 상태 와 같 을 것 입 니 다.
일단 지연 되 어 쫓 기 면 라 이브 러 리 에서 의 운행 을 멈춘다.

stop slave;
3、서버 B 에서 show slave status 에서 서버 A 의 로그 좌표 값 가 져 오기(RelayMaster_Log_File 과 ExecMaster_Log_Pos)라 이브 러 리 에서 시작 합 니 다.

show slave status\G;
start slave;
4.서버 C 에서 라 이브 러 리 에서 실행 을 중단 하고 CHANGE MASTER TO 명령 을 실행 하여 서버 A 를 가리 킵 니 다.

stop slave;
CHANGE MASTER TO 
MASTER_HOST='   A IP',
MASTER_USER='   A     ',
MASTER_PASSWORD='  ',
MASTER_LOG_FILE='         ',
MASTER_LOG_POS=           ;
5.서버 C 에서 라 이브 러 리 를 열 고 상 태 를 확인 합 니 다.

start slave;
show slave status\G;
8.설정 지연 복사
왜 복 사 를 지연 시 켜 야 합 니까?메 인 라 이브 러 리 에 재난 문 구 를 실 행 했 을 수도 있 습 니 다.백업 중인 시간 대 를 통 해 복원 해 야 합 니 다.데이터 베이스 크기 가 너무 크 면 장시간 정지 할 수 있 습 니 다.
이러한 상황 을 피하 기 위해 지연 되 는 라 이브 러 리 를 사용 할 수 있 습 니 다.만약 에 재난 이 발생 하고 지연 되 는 라 이브 러 리 에서 이 재난 문 구 를 실행 하지 않 으 면 복 제 를 중단 하고 라 이브 러 리 에서 이 재난 문 구 를 건 너 뛰 게 하 며 마지막 으로 라 이브 러 리 에서 주 라 이브 러 리 로 향상 시 킬 수 있 습 니 다.
1.라 이브 러 리 실행 중지

stop slave;
2.지연 시간 설정,초 단위

CHANGE MASTER TO MASTER_DELAY = 3600;
start slave;
3.라 이브 러 리 상태 확인

show slave status\G;
SQL_Delay:라 이브 러 리 에서 주 라 이브 러 리 의 초 로 연 기 됩 니 다.
SQL_Remaining_Delay:지연 이 남 은 초 수 입 니 다.지연 을 유지 할 때 이 값 은 NULL 입 니 다.
Slave_SQL_Running_State:SQL 스 레 드 의 상태
9.GTID 복사 설정
전역 트 랜 잭 션 식별 자 GTID 는 프로그램 에서 만 든 유일한 식별 자 이 며,주 라 이브 러 리 에 제출 된 모든 트 랜 잭 션 과 연 결 됩 니 다.이 식별 자 는 주 라 이브 러 리 뿐만 아니 라 다른 라 이브 러 리 에서 도 유일 하 다.
위 에서 설명 한 모든 복 사 는 바 이 너 리 파일 과 복사 시작 점 의 위 치 를 가 리 켜 야 합 니 다.라 이브 러 리 의 메 인 라 이브 러 리 에서 다른 라 이브 러 리 로 전환 하려 면 바 이 너 리 파일 의 위 치 를 다시 가 져 와 야 합 니 다.귀 찮 을 것 입 니 다.
GTID 기반 복 사 를 피하 기 위해 mysql 은 GTID 를 사용 하여 바 이 너 리 로그 의 위 치 를 자동 으로 감지 합 니 다.
1.모든 데이터베이스 에서 my.cnf 에서 GTID 시작

[mysqld]
gtid_mode = ON
enforce-gtid-consistency = 1
skip_slave_start
2.메 인 라 이브 러 리 를 읽 기 전용 으로 설정 하여 메 인 라 이브 러 리 와 라 이브 러 리 데이터 가 일치 하도록 합 니 다.

set @@global.read_only = on;
3.모든 라 이브 러 리 를 다시 시작 하여 GTID 를 유효 하 게 합 니 다.
4.메 인 라 이브 러 리 를 다시 시작 합 니 다.
5、라 이브 러 리 에서 CHANGE MASTER TO 명령 을 실행 하여 GTID 복사 설정

CHANGE MASTER TO
MASTER_HOST='  IP',
MASTER_PORT=3306,
MASTER_USER='    ',
MASTER_PASSWORD='  ',
MASTER_AUTO_POSITION=1;
6.모든 라 이브 러 리 에서 start slave 를 실행 합 니 다.상 태 를 확인 합 니 다.
10.반 동기 복사 설정
기본 적 인 상황 에서 복 제 는 비동기 입 니 다.메 인 라 이브 러 리 는 기록 작업 이 라 이브 러 리 에서 도 착 했 는 지 알 수 없습니다.메 인 라 이브 러 리 와 라 이브 러 리 사이 에 지연 이 있 으 면 메 인 라 이브 러 리 가 무 너 지고 라 이브 러 리 에서 도착 하지 않 은 데 이 터 를 잃 어 버 립 니 다.
이 문 제 를 해결 하기 위해 서 는 라 이브 러 리 에서 기 록 된 데 이 터 를 받 을 때 까지 메 인 라 이브 러 리 가 기다 리 고 있 습 니 다.
1.메 인 라 이브 러 리 에 rpl 설치semi_sync_마스터 플러그 인

install plugin rpl_semi_sync_master SONAME 'semisync_master.so';
windows 에서 다음 과 같이 사용 하 십시오:

install plugin rpl_semi_sync_master SONAME 'semisync_master.dll';
2、플러그 인 활성화 확인

select plugin_name, plugin_status from information_schema.plugins where plugin_name like '%semi%';
3.반 동기 복 제 를 시작 하고 시간 초과 조정

set @@global.rpl_semi_sync_master_enabled=1;
set @@global.rpl_semi_sync_master_timeout=100;
4、라 이브 러 리 에 rpl 설치semi_sync_슬 레이 브 플러그 인

install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';
windows 에서 다음 과 같이 사용 하 십시오:

install plugin rpl_semi_sync_slave SONAME 'semisync_slave.dll';
5、플러그 인 활성화 확인

select plugin_name, plugin_status from information_schema.plugins where plugin_name like '%semi%';
6.라 이브 러 리 에서 반 동기 복 제 를 사용 하고 라 이브 러 리 IO 스 레 드 를 다시 시작 합 니 다.

set global rpl_semi_sync_slave_enabld = 1;
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;
7.다음 과 같은 방식 으로 반 동기 화 상 태 를 볼 수 있 습 니 다.

show status like 'rpl_semi_sync_master_clients';
메 인 라 이브 러 리 에 동기 화 된 클 라 이언 트 수 보기

show status like 'rpl_semi_sync_master_status';
메 인 라 이브 러 리 는 비동기 와 반 동기 복사 사이 에서 전환 되 고 on 은 반 동기 화 를 나타 내 며 off 는 비동기 화 를 나타 낸다.
더 많은 MySQL 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.,,,,,,,
본 논문 에서 말 한 것 이 여러분 의 MySQL 데이터베이스 계획 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기