찾다
데이터 베이스MySQL 튜토리얼mysql 마스터-슬레이브 동기화란 무엇입니까?

mysql 마스터-슬레이브 동기화란 무엇입니까?

Oct 05, 2020 pm 02:39 PM
mysql마스터-슬레이브 동기화

MySQL 마스터-슬레이브 동기화는 백업을 의미합니다. 마스터 라이브러리(Master)는 자체 라이브러리의 쓰기를 슬레이브 라이브러리(Slave)에 동기화합니다. 마스터 라이브러리에서 예측할 수 없는 상황이 발생하면 전체 서버를 사용할 수 없습니다. 슬레이브 데이터베이스에도 데이터 복사본이 있으므로 데이터 손실을 유발하거나 줄이지 않고 데이터를 신속하게 복원할 수 있습니다.

mysql 마스터-슬레이브 동기화란 무엇입니까?

mysql 마스터-슬레이브 동기화란 무엇입니까?

마스터 데이터베이스의 데이터가 변경되면 변경 사항이 실시간으로 슬레이브 데이터베이스에 동기화됩니다.

데이터는 애플리케이션의 중요한 부분입니다. 마스터-슬레이브 동기화는 목적상 약간의 백업 의미가 있습니다. 마스터 라이브러리(Master)는 자체 라이브러리에 있는 쓰기를 슬레이브 라이브러리(Slave)에 동시에 동기화합니다. 전체 서버를 사용할 수 없게 된 경우, 슬레이브 데이터베이스에도 데이터의 복사본이 있기 때문에 데이터 손실을 유발하거나 줄이지 않고 빠르게 데이터를 복원할 수 있습니다.

물론 이것은 첫 번째 레벨에 불과합니다. 마스터-슬레이브 라이브러리의 역할이 이에 국한된다면 개인적으로 데이터베이스를 두 개로 나눌 필요는 없다고 생각합니다. 콘텐츠를 스냅샷으로 다른 서버에 전송하거나, 작성된 콘텐츠를 작성할 때마다 실시간으로 다른 서버로 전송하면 자원 절약뿐만 아니라 재해 복구 및 백업 목적에도 도움이 된다면 좋지 않을까요?

물론 마스터-슬레이브 동기화의 역할은 이에 국한될 수 없습니다. 마스터-슬레이브 구조를 구성하면 일반적으로 슬레이브 노드가 백업 데이터베이스 역할만 하도록 두지 않습니다. 그에 따라 분리( MyCat이나 다른 미들웨어를 사용할 수 있고, 직접 배울 수도 있습니다. 이에 대해서는 다음 MyCat 블로그에서 다루겠습니다. 조금 길 수 있으므로 따로 작성하겠습니다.)

실제 환경에서는 데이터베이스에 대한 읽기 작업 수가 데이터베이스에 대한 쓰기 작업 수보다 훨씬 많기 때문에 마스터가 쓰기 기능만 제공하도록 하고 모든 읽기 작업을 슬레이브 데이터베이스로 옮길 수 있습니다. . 우리가 흔히 말하는 읽기와 쓰기를 분리하는

이것은 마스터의 부담을 줄일 수 있을 뿐만 아니라 재해 복구 백업도 제공하여 일석이조를 제공합니다.

마스터-슬레이브 동기화의 이점은 무엇인가요?

  • 데이터베이스의 로드 용량을 수평으로 확장합니다.

  • 내결함성, 고가용성. 장애 조치/고가용성

  • 데이터 백업.

MySQL 마스터-슬레이브 동기화의 원리

마스터-슬레이브 동기화의 개념에 대해 이야기한 후 마스터-슬레이브 동기화의 원리에 대해 이야기해 보겠습니다. 사실 원리도 매우 간단하며, 그렇지 않습니다. Redis 클러스터만큼 개념이 많습니다.

실제로 MySQL에서 마스터-슬레이브를 구성한 후 마스터 노드에서 쓰기 작업을 수행하는 한 이 작업은 슬레이브가 실행될 때 MySQL의 바이너리 로그(bin-log) 로그에 저장됩니다. 이 때 마스터 머신은 슬레이브에 대한 binlog 덤프 스레드를 엽니다. 마스터의 binlog가 변경되면 마스터의 덤프 스레드는 슬레이브에 알리고 해당 binlog 콘텐츠를 슬레이브에 보냅니다. 마스터-슬레이브 동기화가 활성화되면 슬레이브 노드는 I/O 스레드와 SQL 스레드라는 두 개의 스레드를 생성합니다. 이는 후속 구성에서 우리 눈으로 볼 수 있습니다.

  • I/0 스레드: 이 스레드는 마스터 시스템의 binlog가 슬레이브로 전송되면 IO 스레드가 로컬 릴레이 로그(릴레이 로그)에 로그 내용을 기록합니다. .

  • SQL 스레드: 이 스레드는 릴레이 로그의 내용을 읽고 릴레이 로그의 내용을 기반으로 슬레이브 데이터베이스에서 해당 작업을 수행합니다.

  • 가능한 문제: 쓰기 요청이 많은 경우 슬레이브 데이터와 마스터 데이터가 일치하지 않을 수 있습니다. 이는 로그 전송 프로세스가 짧게 지연되거나 쓰기 명령이 많기 때문입니다. 시스템 속도 불일치로 인해 발생합니다.

이것은 대략 MySQL 마스터-슬레이브 동기화의 원리입니다. 여기서 실제로 중요한 역할을 하는 것은 실제로 이 두 로그 파일인 binlog와 릴레이 로그입니다.

MySQL 마스터-슬레이브 동기화 수동 구축

환경 준비

이번에 마스터-슬레이브 동기화 설정 환경은 CentOS 7, MySQL 8.0.18(바이너리 패키지를 사용하여 설치)입니다.

시나리오 소개

이번에는 하나의 마스터와 두 개의 슬레이브를 포함하여 MySQL 마스터-슬레이브 동기화를 설정하겠습니다.

Master:IP :192.168.43.201 Port:3306
Slave1:IP:192.168.43.202 Port:3306
Slave2:IP:192.168.43.203 Port:3306

빌드 시작

구성 파일 수정

MySQL을 설치한 후 /etc/ 디렉터리에 my.cnf 파일이 있을 것입니다. 파일을 열고 다음 내용을 추가합니다(백업하는 것을 잊지 마세요). 수정 전):

x

#该配置为Master的配置
server-id=201 #Server id 每台MySQL的必须不同
log-bin=/var/lib/mysql/mysql-bin.log #代表开启binlog日志
expire_logs_days=10 #日志过期时间
max_binlog_size=200M #日志最大容量
binlog_ignore_db=mysql #忽略mysql库,表示不同步此库

y

#该配置为Slave的配置,第二台Slave也是这么配置,不过要修改一下server-id
server-id=202
expire_logs_days=10 #日志的缓存时间
max_binlog_size=200M #日志的最大大小
replicate_ignore_db=mysql #忽略同步的数据库

슬레이브 사용자 추가

마스터 노드의 클라이언트를 엽니다. mysql -u root -p 비밀번호

사용자 생성 사용자 생성 'Slave'@'%' '123456'으로 식별;

create user 'Slave'@'%' identified by '123456';

给新创建的用户赋权:grant replication slave on '*.*' to 'Slave'@'%';새로 생성된 사용자 부여: '*.*'의 복제 슬레이브를 'Slave'@'%'에 부여;

마스터 노드 상태 보기

위 작업에 문제가 없으면 클라이언트에 show master status를 입력하여 마스터의 binlog 로그를 봅니다.

配置两个Slave节点

打开两个Slave节点客户端,在我们的另外两个Slave节点中输入如下命令:

change master to master_user='Slave',master_password='123456',master_host='192.168.43.201',master_log_file='mysql-bin.000005',master_log_pos=155,get_master_public_key=1;
#注意,这里的master_log_file,就是binlog的文件名,输入上图中的mysql-bin.000005,每个人的都可能不一样。
#注意,这里的master_log_pos是binlog偏移量,输入上图中的155,每个人的都可能不一样。

配置完成后,输入start slave;开启从节点,然后输入show slave status\G;查看从节点状态

可以看到,在两台Slave的状态中,我们能亲眼看到IO线程和SQL线程的运行状态,这两个线程必须都是yes,才算配置搭建完成。

搭建完成

通过上述步骤,就完成了MySQL主从同步的搭建,相对Redis而言MySQL配置相当简单。下面我们可以进行测试。

先看看三个MySQL的数据库状态:SHOW DATABASES;

可以看到现在数据库都是初始默认状态,没有任何额外的库。

在Master节点中创建一个数据库,库名可以自己设置。

CREATE DATABASE testcluster;

<img class="has lazy" src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/024/fefa55750f9a4ddaec29168c6cc022e9-4.png?x-oss-process=image/resize,p_40" alt="">

可以看到,在Slave中也出现了Master中创建的数据库,说明我们的配置没有问题,主从搭建成功。这里就不再创建表了,大家可以自己试试,创建表再往表中插入数据,也是没有任何问题的。

注意事项

如果出现IO线程一直在Connecting状态,可以看看是不是三台机器无法相互连接,如果可以相互连接,那么有可能是Slave账号密码写错了,重新关闭Slave然后输入上面的配置命令再打开Slave即可。

如果出现SQL线程为NO状态,那么有可能是从数据库和主数据库的数据不一致造成的,或者事务回滚,如果是后者,先关闭Slave,然后先查看master的binlog和position,然后输入配置命令,再输入set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;,再重新start slave;即可,如通过是前者,那么就排查一下是不是存在哪张表没有被同步,是否存在主库存在而从库不存在的表,自己同步一下再重新配置一遍即可。

结语

在写这篇文章之前自己也被一些计算机领域的“名词”吓到过,相信有不少同学都有一样的体会,碰上某些高大上的名词总是先被吓到,例如像“分布式”、“集群”等等等等,甚至在没接触过nginx之前,连”负载均衡“、”反向代理“这样的词都让人觉得,这么高达上的词,肯定很难吧,但其实自己了解了nginx、ribbon等之后才发现,其实也就那么回事吧,没有想象中的那么难。

所以写这篇文章的初衷是想让大家对集群化或者分布式或者其他的一些技术或者解决方案不要有一种望而却步的感觉(感觉计算机领域的词都有这么一种特点,词汇高大上,但是其实思想是比较好理解的),其实自己手动配置出一个简单的集群并没有那么难。

如果学会docker之后再来配置就更加简单了,但是更希望不要只局限于会配置,配置出来的东西只能说你会配置了,但是在这层配置底下是前人做了相当多的工作,才能使我们通过简单配置就能实现一些功能,应该要深入底层,了解配置下面的工作原理,这个才是最重要的,也是体现一个程序员水平的地方。

推荐教程:mysql视频教程

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

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

저장된 절차는 성능을 향상시키고 복잡한 작업을 단순화하기 위해 MySQL에서 사전 컴파일 된 SQL 문입니다. 1. 성능 향상 : 첫 번째 편집 후 후속 통화를 다시 컴파일 할 필요가 없습니다. 2. 보안 향상 : 권한 제어를 통해 데이터 테이블 액세스를 제한합니다. 3. 복잡한 작업 단순화 : 여러 SQL 문을 결합하여 응용 프로그램 계층 로직을 단순화합니다.

쿼리 캐싱은 MySQL에서 어떻게 작동합니까?쿼리 캐싱은 MySQL에서 어떻게 작동합니까?May 01, 2025 am 12:26 AM

MySQL 쿼리 캐시의 작동 원리는 선택 쿼리 결과를 저장하는 것이며 동일한 쿼리가 다시 실행되면 캐시 된 결과가 직접 반환됩니다. 1) 쿼리 캐시는 데이터베이스 읽기 성능을 향상시키고 해시 값을 통해 캐시 된 결과를 찾습니다. 2) MySQL 구성 파일에서 간단한 구성, query_cache_type 및 query_cache_size를 설정합니다. 3) SQL_NO_CACHE 키워드를 사용하여 특정 쿼리의 캐시를 비활성화하십시오. 4) 고주파 업데이트 환경에서 쿼리 캐시는 성능 병목 현상을 유발할 수 있으며 매개 변수의 모니터링 및 조정을 통해 사용하기 위해 최적화해야합니다.

다른 관계형 데이터베이스를 통해 MySQL을 사용하면 어떤 장점이 있습니까?다른 관계형 데이터베이스를 통해 MySQL을 사용하면 어떤 장점이 있습니까?May 01, 2025 am 12:18 AM

MySQL이 다양한 프로젝트에서 널리 사용되는 이유에는 다음이 포함됩니다. 1. 고성능 및 확장 성, 여러 스토리지 엔진을 지원합니다. 2. 사용 및 유지 관리, 간단한 구성 및 풍부한 도구; 3. 많은 지역 사회 및 타사 도구 지원을 유치하는 풍부한 생태계; 4. 여러 운영 체제에 적합한 크로스 플랫폼 지원.

MySQL에서 데이터베이스 업그레이드를 어떻게 처리합니까?MySQL에서 데이터베이스 업그레이드를 어떻게 처리합니까?Apr 30, 2025 am 12:28 AM

MySQL 데이터베이스를 업그레이드하는 단계에는 다음이 포함됩니다. 1. 데이터베이스 백업, 2. 현재 MySQL 서비스 중지, 3. 새 버전의 MySQL 설치, 4. 새 버전의 MySQL 서비스 시작, 5. 데이터베이스 복구. 업그레이드 프로세스 중에 호환성 문제가 필요하며 Perconatoolkit과 같은 고급 도구를 테스트 및 최적화에 사용할 수 있습니다.

MySQL에 사용할 수있는 다른 백업 전략은 무엇입니까?MySQL에 사용할 수있는 다른 백업 전략은 무엇입니까?Apr 30, 2025 am 12:28 AM

MySQL 백업 정책에는 논리 백업, 물리적 백업, 증분 백업, 복제 기반 백업 및 클라우드 백업이 포함됩니다. 1. 논리 백업은 MySQLDump를 사용하여 데이터베이스 구조 및 데이터를 내보내며 소규모 데이터베이스 및 버전 마이그레이션에 적합합니다. 2. 물리적 백업은 데이터 파일을 복사하여 빠르고 포괄적이지만 데이터베이스 일관성이 필요합니다. 3. 증분 백업은 이진 로깅을 사용하여 변경 사항을 기록합니다. 이는 큰 데이터베이스에 적합합니다. 4. 복제 기반 백업은 서버에서 백업하여 생산 시스템에 미치는 영향을 줄입니다. 5. AmazonRDS와 같은 클라우드 백업은 자동화 솔루션을 제공하지만 비용과 제어를 고려해야합니다. 정책을 선택할 때 데이터베이스 크기, 가동 중지 시간 허용 오차, 복구 시간 및 복구 지점 목표를 고려해야합니다.

MySQL 클러스터링이란 무엇입니까?MySQL 클러스터링이란 무엇입니까?Apr 30, 2025 am 12:28 AM

mysqlclusteringenhancesdatabaserobustness andscalabilitydaturedingdataacrossmultiplenodes.itusesthendbenginefordatareplicationandfaulttolerance, highavailability를 보장합니다

MySQL의 성능을 위해 데이터베이스 스키마 설계를 어떻게 최적화합니까?MySQL의 성능을 위해 데이터베이스 스키마 설계를 어떻게 최적화합니까?Apr 30, 2025 am 12:27 AM

MySQL에서 데이터베이스 스키마 설계 최적화는 다음 단계를 통해 성능을 향상시킬 수 있습니다. 1. 인덱스 최적화 : 공통 쿼리 열에서 인덱스 생성, 쿼리의 오버 헤드 균형 및 업데이트 삽입. 2. 표 구조 최적화 : 정규화 또는 정상화를 통한 데이터 중복성을 줄이고 액세스 효율을 향상시킵니다. 3. 데이터 유형 선택 : 스토리지 공간을 줄이기 위해 Varchar 대신 Int와 같은 적절한 데이터 유형을 사용하십시오. 4. 분할 및 하위 테이블 : 대량 데이터 볼륨의 경우 파티션 및 하위 테이블을 사용하여 데이터를 분산시켜 쿼리 및 유지 보수 효율성을 향상시킵니다.

MySQL 성능을 어떻게 최적화 할 수 있습니까?MySQL 성능을 어떻게 최적화 할 수 있습니까?Apr 30, 2025 am 12:26 AM

tooptimizemysqlperformance, followthesesteps : 1) 구현 properIndexingToSpeedUpqueries, 2) useExplaintoAnalyzeanDoptimizeQueryPerformance, 3) AdvertServerConfigUrationSettingstingslikeInnodb_buffer_pool_sizeandmax_connections, 4) uspartOflEtOflEtOflestoI

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구