Mysql의 GTID 기반 복제 모드 이해

coldplay.xixi
풀어 주다: 2020-12-28 10:12:21
앞으로
2341명이 탐색했습니다.

mysql tutorial 칼럼에서는 Mysql의 GTID 기반 복제 모드

Mysql의 GTID 기반 복제 모드 이해

추천(무료): mysql tutorial

GTID 정의

GTID(글로벌 거래 식별자) ​​글로벌 거래 식별자. GTID는 버전 5.6에 도입된 마스터-슬레이브 복제의 주요 개선 사항입니다. 이전 버전의 Binlog 파일 + 위치 기반 마스터-슬레이브 복제에 비해 GTID 기반 마스터-슬레이브 복제는 더 높은 데이터 일관성과 더 강력한 마스터-슬레이브 데이터 복제를 제공합니다. . 마스터-슬레이브 전환 및 장애 조치는 오류 발생 가능성이 낮고 사람의 개입이 거의 필요하지 않습니다.

표현방법

GTID = server_uuid:transaction_id
GTID는 보통 MySQL 시스템 변수 @@GLOBAL.gtid_executed와 시스템 테이블 mysql.gtid_executed에 기록됩니다. code >에서 시스템 변수 @@GLOBAL.gtid_executed는 메모리에 있고 비영구 저장소에 속하지만 시스템 테이블 mysql.gtid_executed는 영구 저장소에 속합니다. @@GLOBAL.gtid_executed 以及系统表mysql.gtid_executed中,系统变量@@GLOBAL.gtid_executed 在内存中,属于非持久化存储,而系统表mysql.gtid_executed属于持久化存储。

GTID比传统复制的优势

  1. 更简单的搭建主从复制
  2. 更简单的实现failover (主从切换),不用以前那样一步一步的去找log_filelog_pos
  3. GTID是连续的没有空洞的,保证数据的一致性,零丢失。
  4. 复制集群有一个统一的方式识别复制位置,给集群管理带来了便利

GTID的限制

  1. 在一个事务里面混合使用引擎如Innodb,myisam,造成多个GTIDS
  2. CREATE TABLE…..SELECT 不能使用
  3. CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE 不能在事务内使用

主从复制流程图


GTID生命周期

  1. 当一个事务在一个主库上被执行和提交,那么这个事务就会被分配一个和该主库uuid相关联的gtid,这个gtid被写入到主库的binlog文件中。
  2. 当这个binlog文件达到最大值发生轮转,或者MySQL Server关闭时,上一个binlog文件中的事务GTID将会被写入到mysql.gtid_executed表中。
  3. 事务提交时,该事务的gtid会很快的添加到系统变量@@GLOBAL.gtid_executed,但是系统表 mysql.gtid_executed 则不会,应为有部分gtid还在binlog中,需要等到binlog轮转或者mysqlServer关闭时才会写入到mysql。gtid_executed表中.
  4. 主库上的binlog通过主从复制协议传送到从库,并写入到从库的relay log(中继日志), 从库读取relay log中的gtid和对应的事务信息,把gtid_next设置为该gtid值,使得从库使用该gtid值应用其对应的事务
  5. 如果多个线程并发应用同一个事务,比如多个线程设置gtid_next为同一个值,MySQL Server 只允许其中一个线程执行,gtid_owned系统变量记录着谁拥有该GTID.

传统更换GTID复制模式

  1. 配置GTID
  2. 所有服务器设置global.read_only
  3. 기존 복제에 비해 GTID의 장점
    🎜마스터-슬레이브 복제 구축이 더 쉬움🎜🎜장애 조치(마스터-슬레이브 전환) 구현이 더 쉬움, 단계별로 log_file 및 <code>log_pos🎜🎜GTID는 구멍 없이 연속되어 데이터 일관성과 손실 제로를 보장합니다. 🎜🎜복제 클러스터에는 복제 위치를 식별하는 통일된 방법이 있어 클러스터 관리가 편리합니다.🎜🎜🎜🎜🎜🎜GTID 제한🎜🎜
      🎜 Innodb 및 myisam과 같은 엔진을 한 트랜잭션에 혼합하면 여러 GTIDS가 발생합니다🎜 🎜CREATE TABLE…..SELECT를 사용할 수 없음🎜🎜CREATE TEMPORARY TABLE 및 DROP TEMPORARY TABLE을 트랜잭션 내에서 사용할 수 없음🎜🎜🎜🎜🎜🎜마스터-슬레이브 복제 흐름 차트 🎜🎜🎜🎜🎜🎜🎜🎜🎜GTID 수명 주기🎜🎜
        🎜거래가 메인에 있는 경우 라이브러리가 실행되고 제출되면 이 트랜잭션에는 기본 라이브러리 uuid와 연결된 gtid가 할당되고 이 gtid는 기본 라이브러리의 binlog 파일에 기록됩니다. 🎜🎜이 binlog 파일이 최대 크기에 도달하여 순환되거나 MySQL 서버가 종료되면 이전 binlog 파일의 트랜잭션 GTID가 mysql.gtid_executed 테이블에 기록됩니다. 🎜🎜트랜잭션이 제출되면 트랜잭션의 gtid가 시스템 변수 @@GLOBAL.gtid_executed에 빠르게 추가되지만 시스템 테이블 mysql.gtid_executed에는 일부 gtid가 아직 남아 있기 때문에 추가되지 않습니다. binlog를 사용하려면 mysql에 쓰기 전에 binlog 회전이나 mysqlServer가 종료될 때까지 기다려야 합니다. gtid_executed 테이블 🎜🎜메인 라이브러리의 binlog는 마스터-슬레이브 복제 프로토콜을 통해 슬레이브 라이브러리로 전송되어 슬레이브 라이브러리의 릴레이 로그(릴레이 로그)에 기록되며, 라이브러리는 릴레이 로그 gtid 및 해당 트랜잭션 정보를 읽고 gtid_next를 gtid 값으로 설정하여 슬레이브 라이브러리가 gtid 값을 사용하여 해당 트랜잭션을 적용하도록 합니다🎜🎜여러 스레드가 동일한 트랜잭션을 동시에 적용하는 경우, 예를 들어 여러 스레드는 gtid_next를 동일한 값으로 설정합니다. MySQL 서버는 스레드 중 하나만 실행하도록 허용합니다. gtid_owned 시스템 변수는 GTID를 소유한 사람을 기록합니다.🎜🎜🎜🎜🎜🎜전통적인 대체 GTID 복제 모드 🎜🎜
          🎜GTID 구성🎜🎜모든 서버에 global.read_only 매개변수를 설정하고 마스터-슬레이브 서버가 동기화될 때까지
          mysql> SET @@global.read_only = ON;
          로그인 후 복사
          🎜🎜마스터-슬레이브 서버를 다시 시작하세요. 🎜🎜마스터-슬레이브 구성을 업데이트하려면 마스터-슬레이브
          mysql> CHANGE MASTER TO
          MASTER_HOST = host,
          MASTER_PORT = port,
          MASTER_USER = user,
          MASTER_PASSWORD = password,
          MASTER_AUTO_POSITION = 1;
          로그인 후 복사
          6을 활성화하세요.🎜🎜

위 내용은 Mysql의 GTID 기반 복제 모드 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:learnku.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿