Mysql 复制-基于GTID 测试

 GTID :  Global  Transaction  Identified


在研究Mycat的时候顺便重新看了一下Mysql的复制策略,以前都是通过传统方式进行文件定位进行的复制设置,这次发现了GTID模式下的复制方式,而且Mysql5.7以及后续的版本对GTID也是大力推崇,所以详细学习了一下GTID的知识,也通过自己的测试进行了配置


为了方便记忆,记录自己在学习GTID中的点点滴滴


本文记录以下几种常见下的GTID复制环境搭建进行记录


1   Master和Slave都是新的数据库服务器,从没有数据的环境开始,这种情况是最简单的,因为不存在数据导入的问题

只需要设置好对应的my.cnf  , 保证主和从服务器的GTID功能开启,启动Master和Slave后,配置slave的change语句后start slave即可

 

2   Master是运行中的数据库,新加入Slave服务器, 而Master开始就是以GTID方式运行的。此时GTID中保存了所有的事务信息,Slave在启动后会一条条的执行,直到与Master的数据同步,这种方式耗费的时间可能比较长


3  Master是运行中的数据库,新加入Slave服务器, 而Master开始并不是以GTID方式运行的。此时GTID中是没有任何信息的,如果此时要配置新的Slave,则需要通过数据的导入导出先保证两个数据库服务器的数据一致,再通过GTID进行数据复制,由于此时需要更改主服务器的my.cnf配置文件,所以必须有重启服务器的过程。



首先在主服务器不是以gtid=on的模式运行,这时候必须重启主服务器,在Master的my.cnf配置文件中加上如下内容:

server-id = 1
log-bin=mysql-bin
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=true

各个参数的含义不再解释


 此时将主服务器的整个data目录拷贝为从服务器的data目录,使用冷备份的方式,修改从服务器的my.cnf配置文件

 重启主服务器,再启动从服务器,此时可以在从服务器上通过

show global variables like '%gtid%' 看到gtid参数的值,因为这个gtid是跟着data目录的某个文件的,所以会将主服务器的内容带过来,保证两边的一致性

在主服务器上同样执行show global variables like '%gtid%' ,对比主从服务器,可以看到此时完全是一样的


所以只要数据和gtid_executed能够具有一致性就保证了同步的准确性,此时不论什么时候开始从服务器的复制都可以,此时主服务器的每个事务都会记录到gtid中,

所在在从服务器上执行

change master to master_host='host',master_port='3306',master_user='root',master_password='passwd',master_auto_position=1

即可



上面记录的是主服务器配置需要修改,必须重启的操作步骤,在实际操作中,有很多情况下是不允许重启的,在这种情况下肯定主服务器是开启了GTID功能的,所以下面记录如何在这种情况下添加从服务器


首先使用mysqldump --all-databases  --single-transaction  --default-character_set=gbk 去导出数据库备份文件,此时由于主服务器开启了GTID功能,所以set-gtid-purged参数默认是开启的,也就是会在导出的备份文件中带上gtid的信息,保证从服务器不会再次同步已有的事务数据


修改从服务器的my.cnf配置文件, 保证GTID的开启,如果此时不开启GTID,导入会在同步GTID信息的SQL语句处报错,后续再开启GTID也可以,不过需要重新source备份文件


启动从服务器,首先set names gbk 执行source 备份文件导入主服务器的SNAP数据,完成后可以通过show global variables like '%gtid%' 看到对应的GTID值已经同步。此时执行

change master to master_host='host',master_port='3306',master_user='root',master_password='passwd',master_auto_position=1,设置主服务器信息,再执行start slave即可


在以上的操作步骤中,可以完全满足在不影响主服务器的情况下新增从服务器,而且使用的复制方式是GTID


本次实验测试了各个情况,对每种情况都有测试,所以能保证以后正确熟练的使用GTID方式的主从复制!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值