前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL5.7基于GTID的主从配置

MySQL5.7基于GTID的主从配置

作者头像
陳斯托洛夫斯記
发布2022-10-27 14:48:19
4550
发布2022-10-27 14:48:19
举报
文章被收录于专栏:XBD

GTID

什么是GTID

从MySQL 5.6.5 开始新增了一种基于 GTID 的复制方式。通过 GTID 保证了每个在主库上提交的事务在集群中有一个唯一的ID。这种方式强化了数据库的主备一致性,故障恢复以及容错能力。 GTID (Global Transaction ID)是全局事务ID,当在主库上提交事务或者被从库应用时,可以定位和追踪每一个事务,对DBA来说意义就很大了,我们可以适当的解放出来,不用手工去可以找偏移量的值了,而是通过CHANGE MASTER TO MASTER_HOST='xxx', MASTER_AUTO_POSITION=1的即可方便的搭建从库,在故障修复中也可以采用MASTER_AUTO_POSITION=‘X’的方式。

工作原理

代码语言:javascript
复制
master更新数据时,会在事务前产生GTID,一同记录到binlog日志中。
slave端的i/o 线程将变更的binlog,写入到本地的relay log中。
sql线程从relay log中获取GTID,然后对比slave端的binlog是否有记录。
如果有记录,说明该GTID的事务已经执行,slave会忽略。
如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog。
在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描

IP

主机名

192.168.1.77

master

192.168.1.78

slave

Master配置

代码语言:javascript
复制
[mysqld]
user=mysql
port=3306
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
character-set-server=utf8mb4
collation_server=utf8mb4_general_ci
server_id=77
log-bin=master-bin			# 二进制日志文件名
binlog_format=row			# 其他格式可能造成数据不一致
log-slave-updates=ON			# 是否记录从服务器同步数据动作
gtid_mode=ON				# 开启GTID功能
enforce-gtid-consistency=ON		# 开启强制GTID一致性
master-info-repository=TABLE		# 记录IO线程读取已经读取到的master binlog位置,用于slave宕机后IO线程根据文件中的POS点重新拉取binlog
relay-log-info-repository=TABLE		# 记录SQL线程读取Master binlog的位置,用于Slave 宕机后根据文件中记录的pos点恢复sql线程
sync-master-info=1			# 启用确保无信息丢失;任何一个事务提交后, 将二进制日志的文件名及事件位置记录到文件中
slave-parallel-workers=2		# 设置从服务器的复制线程数,0表示关闭多线程复制功能
binlog-checksum=CRC32			# 设置binlog校验算法
master-verify-checksum=1		# 设置主服务器是否校验
slave-sql-verify-checksum=1		# 设置从服务器是否校验
binlog-rows-query-log_events=1		# 用于在二进制日志记录事件相关的信息,可降低故障排除的复杂度
sync_binlog=1				# 保证master crash safe,该参数必须设置为1
innodb_flush_log_at_trx_commit=1	# 保证master crash safe,该参数必须设置为1
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Slave配置

代码语言:javascript
复制
[mysqld]
user=mysql
port=3306
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
character-set-server=utf8mb4
collation_server=utf8mb4_general_ci
server_id=78
log-bin=slave-bin
binlog_format=row
log-slave-updates=ON
gtid_mode=ON
enforce-gtid-consistency=ON
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
symbolic-links=0
log-slave-updates = 0			# crash safe slave 5.6版本需要开启
relay_log_recovery = 1 			# crash safe slave
read_only = on				# 设置一般用户为只读模式
super_read_only = on			# 设置super(root)用户为只读模式
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

查看master和slave上的gtid是否开启

在master上创建授权用户

在slave上开启主从同步并查看状态

代码语言:javascript
复制
Slave_IO_State		# 从库的当前状态
Slave_IO_Running	# 读取主服务器二进制日志的I/O线程是否正在运行
Slave_SQL_Running	# 执行读取主服务器中二进制日志事件的SQL线程是否正在运行
Seconds_Behind_Master	# 是否为0,为0就是已经同步了

如果Slave_IO_Running或Slave_SQL_Running不同时为YES,请尝试执行
mysql> stop slave;
mysql> reset slave;
mysql> start slave;

验证主从状态

主服务器的Executed_Gtid_Set值和从服务器的Retrieved_Gtid_Set值是一样的,GTID每提交一次事务,最后一位值会自增1

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • GTID
    • 什么是GTID
      • 工作原理
      • Master配置
      • Slave配置
      • 查看master和slave上的gtid是否开启
      • 在master上创建授权用户
      • 在slave上开启主从同步并查看状态
      • 验证主从状态
      相关产品与服务
      云数据库 MySQL
      腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档