>  기사  >  데이터 베이스  >  mysql 마스터와 슬레이브가 동기화되는 이유는 무엇입니까?

mysql 마스터와 슬레이브가 동기화되는 이유는 무엇입니까?

青灯夜游
青灯夜游원래의
2022-01-05 16:09:546208검색

mysql 마스터와 슬레이브가 동기화되는 이유: 1. 네트워크 지연 2. 마스터 및 슬레이브 시스템의 로드가 일관되지 않습니다. 3. "max_allowed_packet" 설정이 일관되지 않습니다. 4. 키의 auto에서 시작하는 키 값입니다. -증분 키가 자동 증가 단계와 다릅니다. 설정이 일관되지 않습니다. 5. 데이터베이스 버전이 일관되지 않습니다.

mysql 마스터와 슬레이브가 동기화되는 이유는 무엇입니까?

이 튜토리얼의 운영 환경: windows7 시스템, mysql8 버전, Dell G3 컴퓨터.

mysql 마스터-슬레이브 동기화 이유 분석

1. 네트워크 지연

mysql 마스터-슬레이브 복제는 binlog 기반의 비동기 복제이고, binlog 파일은 네트워크를 통해 전송되므로, 물론 네트워크 지연이 주요 원인입니다. 비동기화의 원인 중 대부분, 특히 전산실 간 데이터 동기화가 발생할 가능성이 매우 높으므로 읽기와 쓰기를 분리할 때 비즈니스 계층에서 초기 설계에 주의하십시오.

2. 마스터 머신과 슬레이브 머신의 로드가 일치하지 않습니다.

mysql 마스터-슬레이브 복제는 마스터 데이터베이스에서 1개의 io 스레드를 시작하고 위에서부터 1개의 sql 스레드와 1개의 io 스레드를 시작하기 때문에 머신 중 하나에서 로드가 매우 높고 너무 바빠서 결과적으로 스레드 중 하나에 리소스가 부족하고 마스터-슬레이브 불일치가 발생합니다.

3. Max_allowed_packet 설정이 일치하지 않습니다

마스터 데이터베이스에 설정된 max_allowed_packet이 슬레이브 데이터베이스의 설정보다 큽니다. 마스터 데이터베이스에서 대규모 SQL 문을 실행할 수 있는 경우 슬레이브 데이터베이스의 설정이 너무 작습니다. 실행될 수 없으므로 마스터 데이터베이스가 실패합니다.

4. 마스터-슬레이브 불일치는 키 자동 증가 키에서 시작하는 키 값과 자동 증가 단계 설정 간의 불일치로 인해 발생합니다.

5. mysql이 비정상적으로 다운되었을 때, sync_binlog=1 또는 innodb_flush_log_at_trx_commit=1이 설정되어 있지 않으면 binlog나 Relaylog 파일이 손상되어 마스터-슬레이브 불일치가 발생할 가능성이 매우 높습니다.

6. 마스터-슬레이브 동기화는 mysql 자체의 버그로 인해 발생합니다.

7. 데이터베이스 버전이 일치하지 않습니다, 특히 상위 버전이 마스터이고 하위 버전이 슬레이브인 경우 마스터 데이터베이스에서 지원하는 기능이 슬레이브 데이터베이스에서 지원되지 않습니다.

해결 방법

방법 1: 오류를 무시하고 동기화를 계속합니다.

이 방법은 마스터-슬레이브 데이터베이스의 데이터가 크게 다르지 않거나 데이터가 동일할 필요가 없는 상황에 적합합니다. 완전히 통합되었으며 데이터 요구 사항이 엄격하지 않습니다. 상황

해결책:

stop slave;

는 단계 오류를 건너뛰는 것을 의미하며 다음 숫자는 가변적입니다.

set global sql_slave_skip_counter =1;
start slave;

그런 다음 mysql> showslave statusG를 사용하여 확인합니다.

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

좋아, 이제 마스터입니다. -슬레이브 동기화 상태가 정상입니다. . .

방법 2: 마스터-슬레이브를 다시 만들고 동기화를 완료하세요

이 방법은 마스터-슬레이브 데이터베이스의 데이터가 매우 다르거나 데이터를 완전히 통합해야 하는 상황에 적합합니다

해결 단계는 다음과 같습니다.

1. 먼저 마스터 데이터베이스에 들어가서 데이터가 기록되지 않도록 테이블 잠금을 수행합니다.

다음 명령을 사용하세요:

mysql> flush tables with read lock;

참고: 이 장소는 읽기 전용 상태로 잠겨 있습니다. 명령문은 대소문자를 구분하지 않습니다

2. 데이터를 백업하세요

데이터를 mysql.bak.sql 파일에 백업하세요.

mysqldump -uroot -p -hlocalhost > mysql.bak.sql

참고: 데이터베이스 백업은 정기적으로 수행해야 합니다. , 더 편리하고 데이터가 완벽한지 확인하세요

3. 마스터 상태를 확인하세요

mysql> show master status;
+-------------------+----------+--------------+-------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+-------------------------------+
| mysqld-bin.000001 | 3260 | | mysql,test,information_schema |
+-------------------+----------+--------------+-------------------------------+
1 row in set (0.00 sec)

4. mysql 백업 파일을 슬레이브 머신으로 전송하고, 데이터 복구를 수행하세요

scp 명령을 사용하세요

scp mysql.bak.sql root@192.168.128.101:/tmp/

5. 슬레이브 라이브러리의 상태

mysql> stop slave;

6. 그런 다음 슬레이브 라이브러리에서 mysql 명령을 실행하고 데이터 백업을 가져옵니다

mysql> 소스 /tmp/mysql.bak.sql

7. 슬레이브 동기화를 설정합니다. 두 개의 항목이 있는 동기화 지점 |

위 내용은 mysql 마스터와 슬레이브가 동기화되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.