首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >配置MySQL GTID 主从复制

配置MySQL GTID 主从复制

作者头像
Leshami
发布于 2018-08-13 06:20:15
发布于 2018-08-13 06:20:15
4.8K03
代码可运行
举报
文章被收录于专栏:乐沙弥的世界乐沙弥的世界
运行总次数:3
代码可运行

GTID是一个基于原始mysql服务器生成的一个已经被成功执行的全局事务ID,它由服务器ID以及事务ID组合而成。这个全局事务ID不仅仅在原始服务器器上唯一,在所有存在主从关系 的mysql服务器上也是唯一的。正是因为这样一个特性使得mysql的主从复制变得更加简单,以及数据库一致性更可靠。本文主要描述了快速配置一个基于GTID的主从复制架构,供大家参考。

一、GTID的概念

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1、全局事务标识:global transaction identifiers。
2GTID是一个事务一一对应,并且全局唯一ID3、一个GTID在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致。
4GTID用来代替传统复制方法,不再使用MASTER_LOG_FILE+MASTER_LOG_POS开启复制。而是使用MASTER_AUTO_POSTION=1的方式开始复制。
5、MySQL-5.6.5开始支持的,MySQL-5.6.10后开始完善。
6、在传统的slave端,binlog是不用开启的,但是在GTID中slave端的binlog是必须开启的,目的是记录执行过的GTID(强制)。

二、GTID的组成

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GTID = source_id:transaction_id
source_id,用于鉴别原服务器,即mysql服务器唯一的的server_uuid,由于GTID会传递到slave,所以也可以理解为源ID。
transaction_id,为当前服务器上已提交事务的一个序列号,通常从1开始自增长的序列,一个数值对应一个事务。        
示例:          
3E11FA47-71CA-11E1-9E33-C80AA9429562:23
前面的一串为服务器的server_uuid,即3E11FA47-71CA-11E1-9E33-C80AA9429562,后面的23为transaction_id

三、GTID的优势

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1、更简单的实现failover,不用以前那样在需要找log_file和log_pos。
2、更简单的搭建主从复制。
3、比传统的复制更加安全。
4GTID是连续的没有空洞的,保证数据的一致性,零丢失。

四、GTID的工作原理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1、当一个事务在主库端执行并提交时,产生GTID,一同记录到binlog日志中。
2、binlog传输到slave,并存储到slave的relaylog后,读取这个GTID的这个值设置gtid_next变量,即告诉Slave,下一个要执行的GTID值。
3、sql线程从relay log中获取GTID,然后对比slave端的binlog是否有该GTID4、如果有记录,说明该GTID的事务已经执行,slave会忽略。
5、如果没有记录,slave就会执行该GTID事务,并记录该GTID到自身的binlog,
   在读取执行事务前会先检查其他session持有该GTID,确保不被重复执行。
6、在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描。

五、配置GTID

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
对于GTID的配置,主要修改配置文件中与GTID特性相关的几个重要参数(建议使用mysql-5.6.5以上版本),如下:
1、主:
[mysqld]
#GTID:
server_id=135                #服务器id
gtid_mode=on                 #开启gtid模式
enforce_gtid_consistency=on  #强制gtid一致性,开启后对于特定create table不被支持

#binlog
log_bin=master-binlog
log-slave-updates=1    
binlog_format=row            #强烈建议,其他格式可能造成数据不一致

#relay log
skip_slave_start=1            

2、从:
[mysqld]
#GTID:
gtid_mode=on
enforce_gtid_consistency=on
server_id=143

#binlog
log-bin=slave-binlog
log-slave-updates=1
binlog_format=row      #强烈建议,其他格式可能造成数据不一致

#relay log
skip_slave_start=1

六、配置基于GTID的复制

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1、新配置的mysql服务器
对于新配置的mysql服务器,按本文第五点描述配置参数文件后,在slave端执行以下操作
(root@localhost) [(none)]> CHANGE MASTER TO  
    ->  MASTER_HOST='192.168.1.135',    
    ->  MASTER_USER='repl',    
    ->  MASTER_PASSWORD='xxx',    
    ->  MASTER_PORT=3306,    
    ->  MASTER_AUTO_POSITION = 1;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

(root@localhost) [(none)]> start slave;
Query OK, 0 rows affected (0.01 sec)

(root@localhost) [(none)]> show slave status \G ###可以看到复制工作已经开始且正常
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.135
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-binlog.000001
          Read_Master_Log_Pos: 151
               Relay_Log_File: slave-relay-log.000002
                Relay_Log_Pos: 369
        Relay_Master_Log_File: master-binlog.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

2、已运行经典复制mysql服务器转向GTID复制
a、按本文第五点描述配置参数文件;
b、所有服务器设置global.read_only参数,等待主从服务器同步完毕;
        mysql> SET @@global.read_only = ON; 
c、依次重启主从服务器;
d、使用change master 更新主从配置;
        mysql> CHANGE MASTER TO
        > MASTER_HOST = host,
        > MASTER_PORT = port,
        > MASTER_USER = user,
        > MASTER_PASSWORD = password,
        > MASTER_AUTO_POSITION = 1;
e、从库开启复制
        mysql> START SLAVE;
f、验证主从复制        
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年02月03日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【操作系统、数学】什么是排队论?如何理解排队论?排队论有什么用处?Queueing Theory?什么是 Little’s Law?
排队论(Queueing Theory)是研究系统中排队现象的数学理论,旨在分析资源分配、服务效率及等待时间等问题。它广泛应用于计算机科学、通信网络、交通规划、工业工程等领域。
Lokinli
2025/07/20
950
【操作系统、数学】什么是排队论?如何理解排队论?排队论有什么用处?Queueing Theory?什么是 Little’s Law?
matlab计算机仿真与蒙特卡洛法【数学建模】
前言:在计算机出现之前,我们对数学模型的研究只能通过数学推导和实验研究两种方法。在此之后,我们可以通过在计算机上对实际问题的模拟、仿真求解模型。计算机仿真在数学建模中具有很重要的作用,而蒙特卡洛法则是计算机仿真中的一个重要方法。
巴山学长
2021/07/09
2.4K0
matlab计算机仿真与蒙特卡洛法【数学建模】
排队论[通俗易懂]
**µ代表单位时间服务人的个数 ** 判断模型是否稳定,一般用比较λ和µ的大小(下图的系统服务强度)
全栈程序员站长
2022/09/20
1.6K0
排队论[通俗易懂]
数学建模暑期集训17:蒙特卡洛法
蒙特卡罗⽅法⼜称统计模拟法,是⼀种随机模拟⽅法,将所求解的问题同⼀定的概率模型相联系,⽤电⼦计算机实现统计模拟或抽样,以获得问题的近似解。为象征性地表明这⼀⽅法的概率统计特征,故借⽤赌城蒙特卡罗命名。
zstar
2022/06/14
6480
数学建模暑期集训17:蒙特卡洛法
PTA 银行排队问题之单队列多窗口服务
该文介绍了在银行排队问题中,使用单队列多窗口系统进行服务的实现方法。通过统计每个窗口的平均等待时间、最长等待时间、最后完成时间,以及每个窗口服务了多少名顾客,来评估系统的性能。最后,返回了平均等待时间、最长等待时间和最后完成时间,以及每个窗口服务了多少名顾客。
Kindear
2017/12/29
2.7K0
Python|数学建模|排队论仿真
数模准备过程中,写了这种运筹学仿真的代码,虽然自己选了C题没有用到,但考虑到市面上存在的仿真代码较少,聊以为分享。
朝闻君
2021/11/22
1.4K0
公交车总迟到?你大概掉进了“等待时间悖论"
你到了车站,准备搭乘声称每10分钟一班的公交车。你盯着你的手表留意着时间,结果公交车终于在11分钟后到来。
磐创AI
2018/12/18
4130
干货 | AnyLogic建模仿真介绍+武汉疫情案例实战
别急,今天就让小玮陪你一起走进一款多方法仿真软件AnyLogic,来了解了解多方法仿真是什么以及简单的使用AnyLogic这样的多方法仿真软件。
短短的路走走停停
2020/03/06
7.4K0
干货 | AnyLogic建模仿真介绍+武汉疫情案例实战
随机过程(F)——习题课(连续时间马尔科夫链-布朗运动)
这是《随机过程》系列习题课的第二部分。这一部分我们会介绍从连续时间马尔科夫链到布朗运动的一些习题。这一部分的难度相对大一些,当然了,我们提供的习题也会稍微少一些。
学弱猹
2021/08/10
9580
​常见的8个概率分布公式和可视化
来源:Deephub Imba本文约2800字,建议阅读8分钟本文我们将介绍一些常见的分布并通过Python 代码进行可视化以直观地显示它们。 概率和统计知识是数据科学和机器学习的核心;我们需要统计和概率知识来有效地收集、审查、分析数据。 现实世界中有几个现象实例被认为是统计性质的(即天气数据、销售数据、财务数据等)。这意味着在某些情况下,我们已经能够开发出方法来帮助我们通过可以描述数据特征的数学函数来模拟自然。 “概率分布是一个数学函数,它给出了实验中不同可能结果的发生概率。” 了解数据的分布有助于更好
数据派THU
2022/04/29
1.2K0
​常见的8个概率分布公式和可视化
原创 | 有趣的等待时间悖论
以上场景发生时,我们通常不得不选择等一会,那关于这个等待时间的平均值,其实有一个有趣的悖论,本文中作者会对其做一个通俗且深入的介绍。
数据派THU
2023/12/11
3640
原创 | 有趣的等待时间悖论
详谈排队论模型的始末
一般而言,排队问题相当常见,比如等待银行柜台服务、加油站加油或者多个进程等待cpu处理都会出现排队,为叙述方便,将排队者称为顾客,提供服务的一方称为服务员。常识都知道我们不希望排队(为了享受排队的另说),排队意味着是时间成本的消耗,如果是物资等待被处理的排队则说明物资出现积压,不管哪种都会对生产效率产生重要负面影响,但往往这个排队现象是无法完全消失的,这是一种随即现象,排队与很多因素相关,其中最重要的两部分是顾客到达时间间隔的随机时间和服务过程的服务随机时间两部分,而排队论的宗旨也是系统在不同场景下利用以上两种过程规律对实际的排队系统做出最优的决策以提高效益。
用户7506105
2021/08/09
1.7K0
MySQL内置数据库performance_schema详解(五):监控文件系统层调用的表介绍
performance_schema 是 MySQL 数据库中的一个内置的系统数据库,最早从MySQL5.5版本产生,这个数据库主要用于收集和存储与数据库性能相关的统计信息和指标。
小明互联网技术分享社区
2023/12/26
4220
MySQL内置数据库performance_schema详解(五):监控文件系统层调用的表介绍
MySQL内置数据库performance_schema详解(二):等待事件记录表介绍
performance_schema 是 MySQL 数据库中的一个内置的系统数据库,最早从MySQL5.5版本产生,这个数据库主要用于收集和存储与数据库性能相关的统计信息和指标。
小明互联网技术分享社区
2023/12/22
1.9K0
MySQL内置数据库performance_schema详解(二):等待事件记录表介绍
DFC:控制 ~~到达率~~ 最小化等待时间
在这个到达率下的等待时间(到达越多等待时间越长)和服务器成本(到达越多等待能耗越高)
zhangjiqun
2024/12/14
1950
DFC:控制 ~~到达率~~ 最小化等待时间
PAT 1017 Queueing at Bank (25分) prioriry_queue
Suppose a bank has K windows open for service. There is a yellow line in front of the windows which devides the waiting area into two parts. All the customers have to wait in line behind the yellow line, until it is his/her turn to be served and there is a window available. It is assumed that no window can be occupied by a single customer for more than 1 hour.
vivi
2020/07/14
4520
python协程3:用仿真实验学习协程
前两篇我们已经介绍了python 协程的使用和yield from 的原理,这一篇,我们用一个例子来揭示如何使用协程在单线程中管理并发活动。
goodspeed
2020/12/25
1.1K0
python的高性能web应用的开发与测试实验
python的高性能web应用的开发与测试实验 tornado“同步和异步”网络IO模型实验 引言 python语言一直以开发效率高著称,被广泛地应用于自动化领域: 测试自动化 运维自动化 构建发布自
用户1170933
2018/01/05
1.8K0
python的高性能web应用的开发与测试实验
排队论模型
我们使用六个符号表示排队模型,在符号之间用斜线隔开,记为 X/Y/Z/A/B/C 。第一个符号 X 表示顾客到达流或顾客到达间隔时间的分布;第二个符号 Y 表示服务时间的分布;第三个符号 Z 表示服务台数目;第四个符号 A 是系统容量限制;第五个符号 B 是顾客源数目;第六个符号 C 表示的是服务规则,例如先到先服务 FCFS, 后到先服务 LCFS 等。
hotarugali
2022/03/01
1.5K0
随机过程(7)——更新奖赏过程:交替更新过程,生存与濒死时间,观察悖论
本节我们开始介绍更新过程中的更新奖赏过程,这是一个很有趣的更新过程的应用,也会占据很大的篇幅。
学弱猹
2021/08/10
1.5K0
随机过程(7)——更新奖赏过程:交替更新过程,生存与濒死时间,观察悖论
推荐阅读
相关推荐
【操作系统、数学】什么是排队论?如何理解排队论?排队论有什么用处?Queueing Theory?什么是 Little’s Law?
更多 >
交个朋友
加入前端趋势交流群
追踪前端新趋势 交流学习心得
加入前端工作实战群
前端工程化实践 组件库开发经验分享
加入[后端] 腾讯云技术交流站
后端架构设计 高可用系统实现
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档