---
title: 同步方式
description: "MySQL主从复制有两种同步方式：传统方式和GTID方式，主库和从库同步方式保持一致。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdbs/ecosystemEnable/MySQL/kunpengmysqlmasterslave_03_0008.html
sourcePath: /source/zh/kunpengdbs/ecosystemEnable/MySQL/kunpengmysqlmasterslave_03_0008.html
indexId: 74df23695bf1d3f1194158893b923267bb6597651a09c084b0f3b52d90e66cf080
---
# 同步方式

MySQL主从复制有两种同步方式：传统方式和GTID方式，主库和从库同步方式保持一致。

#### 传统方式

从库通过获取主库的binlog信息（binlog文件名和binlog中的位置）进行复制，默认采用此方式进行复制。图1 传统复制架构


#### GTID方式

MySQL版本在5.7及以上时推荐使用GTID方式。MySQL为每个事务提供一个GTID（全局事务标识，全局唯一），GTID唯一性不限于主库，在整个主从集群环境中也是唯一的。GTID是由主库生成的，与事务绑定的唯一标识，包括source_id和transaction_id两部分（例如图2中的UUID:33、UUID:34和UUID:35）。其中source_id是产生GTID服务器的UUID，保存在DATADIR/auto.cnf文件里，transaction_id是sequence_number，是每台服务器从1开始自增的顺序号。每次事务提交后会自动生成GTID，主库在当前已执行的GTID集合（即gtid_executed）中找一个大于0的且未使用的最小值作为下个事务的GTID。从库在relay log中读取到主库的GTID，而后执行的事务采用该GTID。图2 GTID复制架构


GTID的复制流程：

1. 主库在事务ID前面添加GTID生成新的事务ID，然后更新数据，并把新的事务ID和数据操作记录到binlog，通过dump线程通知从库有数据更新。
2. 从库通过IO线程获取主库的binlog，把binlog写入relay log。
3. 从库通过SQL线程在relay log中读取GTID，然后在从库binlog中查看是否有该GTID的记录，如果有记录说明该GTID的事务已经执行，从库不执行该GTID的事务，如果没有记录从库执行该GTID的事务，并把该GTID的事务和更新操作记录到binlog。

图3 GTID复制流程


#### 适用场景

GTID复制已经是MySQL复制使用的一种通用复制方式，GTID的优势在于自动查找断点信息进行复制，不需要人为的查找binlog和pos点，更易于维护和管理。
