MYSQL 대기의 지연 시간 [회전]을 측정하기 위해 Seconds_Behind_Master은 사용하지 마십시오

Seconds_Behind_Master은 쇼 노예 상태, 기본 및 지연 간의 복제의 측정을 제공하여 MySQL을 자체, 그러나 오늘은 장면을 만나 Seconds_Behind_Master은이, MySQL의 정상 라이브러리 표시 IO / SQL 스레드에 의해 준비 쇼 노예 상태 0 발견 주요 도서관의 변화는 있지만, 오랜 시간 동안 백업 저장소로 동기화 할 수 없습니다. 인간의 개입없이 시간 후에까지, MySQL은 자동으로 기본 라이브러리를 다시 연결합니다, 중앙 도서관은 변경 사항을 복제하는 것을 계속한다.

영향의 구체 : MySQL은, Percona, MariaDB의 모든 버전.

이 장면이지만 아주 특별한 만남의 확률은 높지는 않지만, 개인적으로는 MySQL DBA를 사용하도록을 상기 할 필요를 느낀다. 다음은이 장면의 분석뿐만 아니라 MySQL의 복제 재시도 메커니즘의보다 깊이있는 이해를 도움을 통해.

첫째, 단계 재현하는 방법

일시적으로 대기 사본을 빌드 중앙 도서관 네트워크 분리와 MySQL 바이너리 로그 덤프 스레드에 대한 기본 저장소를 죽일.

복제 라이브러리는 노예 상태를 보여,이 시간에 관찰 준비 :

Slave_IO_Running : 예

Slave_SQL_Running : 예

Seconds_Behind_Master은 : 0

메인 라이브러리의 변화를 만들기 위해, 복원이 시간에 네트워크를 넣어 후에 그러나, 도서관 장비는 업데이트 된 데이터를 얻을 수 없습니다. 그리고 대기 데이터베이스에서 노예 상태 표시를 보여 IO 스레드가 평소와 같이 SQL 쓰레드이며, 지연되었습니다 사본은 0입니다.

모든 것은, 보통의 모니터링 소프트웨어가 지연 라이브러리 데이터가 정상 찾을 수 없습니다입니다.

둘째, 원리 분석

MySQL 데이터베이스의 복제는 다른 중요한 분야는 다르다. 확장 성 및 고 가용성 기준입니다. 자체가 매우 지적 된, 우리는 변경 마스터 바이너리 로그 백업 라이브러리에 중앙 도서관에서 관계를 구축 할 수있는 파일 이름과 오프셋 사본을 지정된 호출해야합니다.

MySQL의 복제 스레드는 자동으로 차의 중단시에 기록 된 현재 위치를 복사하고 중앙 도서관에 연결 자동으로 복제하고 중단 한 부분부터 다시 복사합니다. 이러한 작업은 완전히없는 인간의 개입으로 자동화되어 있습니다. 이것은 MySQL의 DBA 편의를 많이 가져 준다, 그러나 또한 많은 세부 사항을 숨 깁니다.

정말 문제가 어떻게이 문제를 해결하는 방법의 앞에 진실을 이해하기 위해서, 우리는 진정으로 MySQL의 복제의 원리를 이해할 필요가있다.

2.1 "푸시"또는 "풀"

첫째, MySQL의 복제가 아니라 "풀"보다 "푸시"입니다. "당겨"MySQL의 라이브러리 지속적으로 중앙 도서관 순환 데이터 업데이트 여부를 묻는 장비, 이러한 방법으로 자원을 더 소비하고, 비효율적 인을 말한다. "푸시"는 메인 MySQL 데이터베이스 푸시에 발생 데이터의 상호 작용의 변화, 자원의 적은 소비가있는 경우에만 그들은이 방법으로 업데이트 된 데이터를 대기 데이터베이스에이 변경을 의미합니다. 당신이 프로그래머 배경 있다면, 당신은 "푸시"접근 방식을 선택합니다.

MySQL은 그래서 특별히 "푸시"열, 사실, 마스터 데이터베이스 응용 프로그램 데이터에 대한 기록의 변경시 라이브러리가 준비 파일을 지정해야하는 방법 오프셋 (offset) 바이트의 특정 수의 주요 라이브러리 바이너리 로그 (MASTER_LOG_FILE) (MASTER_LOG_POS) . 바이너리 로그 덤프 스레드를 시작합니다 중앙 도서관에 해당하는 라이브러리에 의해 전송 된 조각하여이 시작 위치 조각에서 레코드를 변경합니다. 도서관 장비가 주요 라이브러리 변경을 통해 수신 된 로컬 데이터 변경 내용을 사용, 하나를 받았다.

2.2 이유

쇼 노예 상태 표시 모든 것이 정상입니다 이유는 위의 분석에서, 우리는 대략 추측 할 수 있지만, 사실은 마스터 데이터베이스가 백업 저장소까지 동기화 할 수없는 변경 :

뭔가 잘못되면, 바이너리 로그 덤프 프로그램은 우리가 죽일 것입니다. 라이브러리가 준비 듣는 당사자가, 변경을받지 못한, 그것은 데이터가 이상 밀어 어떤 변화의 결과로, 중앙 도서관에 어떤 변경없이 오랜 시간 동안 생각합니다. 도서관 장비는 해당 중앙 도서관 바이너리 로그가 결국 스레드가 예기치 않게 종료, 또는 데이터 변경없이 장시간되는 덤프 확인할 수 없습니다. 그래서,이 두 가지 경우, 대기 데이터베이스가 정상으로 표시됩니다.

물론, MySQL은 이러한 상황을 방지하기 위해 노력할 것입니다. 예를 들면 :

바이너리 로그는 죽일 덤프 죽일 라이브러리의 thread 리터 사항. 그래서 우리는 재현 라이브러리에 의해 준비하지 않을 경우이 알림이 전송되는 것을 확인해야합니다, 그 문제를 재현하기위한 열쇠는 바이너리 로그는 대기 데이터베이스로 전송 될 수 없습니다 인해 네트워크 정체 또는 기타 이유로 킬 (kill) 메시지를 덤프 거짓말입니다.

받지 못한 경우 오랜 시간 동안 도서관에서 준비 리터는 중앙 도서관의 변화에서, 주기적으로 주요 라이브러리를 다시 연결합니다했다.

2.3 문제가 발생하지 않도록

위의 분석을 바탕으로, 우리는 피할 수없는이 경우에서와 MySQL은, 우리가 어떤 열을 방지하는 방법을 가질 수 있다는 것을 알고있다 :

1. 수동 해결 : 모니터링 대기 시간의 방법을 변경 시간에 문제를 식별합니다.

2. 사업은 방지 : 올바른 설정 --master-재시도 횟수, --master-연결 재시도, --slave-NET-시간 제한 복사 재시도 매개 변수를.

L 수동 처리

대부분의 MySQL의 지연 모니터링 Seconds_Behind_Master은에서 직접 수집 쇼 노예 상태. 이 경우, Seconds_Behind_Master은 마스터와 슬레이브 사이의 지연의 진정한 척도를 복제 할 수 없습니다. 우리는 마스터 라이브러리에서 해당 폴링 시간 정보를 삽입하여 추천 및 기본 획득하고 라이브러리에 의해 준비 프로그램을 복사하여 시간 차이를 지연 할 수 있습니다. Percona는 유사한 솔루션 PT-하트 비트를 제공합니다.

슬레이브을 시작;이 문제의 발견 후, 우리는 단지 노예를 중지해야 다시 시작 복제가이 문제를 해결할 수 있습니다. 

L 방지 구상

MySQL은 복제 스레드 재 연결, 중앙 도서관을 세 개의 매개 변수를 지정할 수 있습니다 --master-재시도 횟수, --master-연결 재시도, --slave-NET-타임 아웃.

복사 대기 변경 마스터를 만들 때 마스터 연결 재시도 및 마스터 재시도 횟수가 지정되고, 슬레이브-NET-제한 시간은 MySQL의 런타임 온라인으로 제공 전역 변수이다.

특정 재시도 전략 : 도서관 장비 노예 그물 - 시간 제한 초 동안 처음으로 시작하고 다시 시도합니다 주요 라이브러리로 데이터를받지 못했습니다. 그런 다음 모든 마스터 - 연결 - 시도 초, 대기 데이터베이스는 다시 마스터 라이브러리를 다시 연결을 시도합니다. 마스터 재시도 카운트 시간을 재 시도까지, 포기하고 다시 시도합니다. 재시도 처리하는 경우, 심지어 중앙 도서관에, 현재의 중앙 도서관은 대기의 노예 그물 제한 시간 (초)을 시작하는 것입니다 그래서 그것은 좋은.

노예 망 초과의 기본 값 3600 초 (MySQL 버전 <= 5.7.6), 마스터 접속 재시 기본 60초, 86400 배 마스터 재시도 횟수 기본값. 라이브러리로를 통해 전송 된 데이터를 변경하지 않고 중앙 도서관 시간은 주 라이브러리를 다시 연결을 시도합니다 경우 즉,이다. 즉 우리의 시뮬레이션 시나리오에서, 한 시간 후, 대기 데이터베이스가 데이터 변경 내용을 동기화 계속하는 이유를 주요 라이브러리를 다시 연결 이유입니다.

메인 라이브러리에 더 자주 변경하는 경우이 경우, 작은 노예 그물 제한 시간이 바이너리 로그 덤프 스레드가 최신 업데이트를 통해 밀어되지 않습니다, 종료 메인 라이브러리를 피하기 위해 지점을 설정하는 것이 좋습니다.

대기 데이터베이스가 자주 주요 도서관, 자원의 낭비를 다시 연결하면 물론 너무 작 노예 그물 제한 시간 설정이 문제가 또한이 메인 라이브러리가 실제로 상대적으로 작은 경우 변경 이어질 것입니다.

查看设置情况:show variables like 'slave_net_timeout';

기본 구성 공식 웹 사이트 :

속성
명령 줄 형식 --slave-net-timeout=#
시스템 변수 slave_net_timeout
범위 글로벌
동적
유형 정수
기본값 (> = 5.7.7) 60
값을 기본 (<= 5.7.6)를 3600
최소값 1

 

 

추천

출처www.cnblogs.com/sz-wenbin/p/11775297.html