MySQL级联复制中数据同步

    最近开发的同事反馈了一个问题,说有一台北京节点的MySQL数据库数据延迟太大,想让我们帮忙看看怎么解决。

    这个问题一下子让我想起了之前“水深火热”的日子,因为这是一套MySQL级联复制的环境。这么做的目的也是为了能够方便数据查询和统计任务,看起来虽好,但是老是有一些不可控因素。

   北美使用AWS在北美,都是实时的业务数据,考虑了灾备和读写分离使用了一主一从的架构,新加坡节点2是一个中继节点,也使用了AWS,可以看到新加坡节点是北美节点的从库,但是北京的主库。 北京节点是一个IDC设备。就这样一个级联复制的环境就跑起来了。


由于新加坡的节点网络延迟太大,而且很不稳定,之前的一部分业务最后就索性迁移到香港的云服务上了。剩下的这部分业务稳定运行了一段时间,但是最近经常发现数据延迟很大,这个问题又提上了日程。

我们经过讨论,开发同事建议,索性直接连北美节点吧,我这边简单做了测试,网速其实还是要好一点。所以改进后的架构如下:


但是这里就面临一个问题,怎么去无缝的把节点的数据顺利切换过去。发现这个问题变得有些纠结了,因为新加坡的节点目前和北京节点是有延迟,直接切换过去肯定不行,而且偏移量在不同的节点都有不小的差别。怎么调和呢。

每当到这个时候我就想起了MySQL非常经典的架构图。


碰到实际的问题再来看的时候发现有很多地方就需要加深理解了。

单纯使用偏移量,我和同事在纸上分析和讨论,感谢总是有一些不确定的地方。这让我就非常怀念起了5.6推出的GTID,这个特性在这个问题前真是太有用了。GTID的统一格式是由source_id加transaction_id构成。这个source_id就是UUID,是一个唯一性标示,在读写分离,一主多从的环境,还有当下的级联复制的环境中尤其有用,因为是全局事务的概念,所以不会出现重复的情况,这一点和Oracle里物理一致性的SCN很有相似的味道。

在这个问题中,如果能够启用GTID,那么北美节点的UUID在北京节点还是一个唯一性的标示,能够正确的标识和应用事务信息。

但是当前的环境是5.5版本,很遗憾使用不了,那么一种折中的办法就是停止新加坡的节点,然后让北京节点去追平数据,然后以这个为基准,让北京节点继续从北美的slave节点继续抓取增量的数据变化。

整个过程就会使用change master的方式来完成了。

时间: 2024-11-05 23:33:59

MySQL级联复制中数据同步的相关文章

MySQL级联复制中的数据同步(第二篇)

今天解决了两个蛮有意思的MySQL问题,简单分享出来. 首先是昨天说的级联复制的情况,因为架构做了调整,我们要删除其中的一个中继节点(新加坡节点),而直接使用北京节点去连接北美的节点. 更多的信息可以参考. MySQL级联复制中的数据同步(r11笔记第20天) 大体的架构方式如下: 如此一来,为了避免重建从库,而且没有GTID的情况下,我们可以统一规划一下偏移量,平滑迁移. 实现后的架构图如下: 看起来还是比较简单,但是偏移量真是一个比较琐碎细致的活儿.在此也感谢我的同事程振,我们一起讨论了实现

MySQL快速复制数据库数据表的方法_Mysql

某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库.使用以下方法,可以非常简单地实现. 假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb.步骤如下: 1. 首先创建新的数据库newdb #mysql -u root -ppassword mysql>CREATE DATABASE `newdb` DEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI; 2. 使用mysqldump及mysql的

sybase复制服务器中数据同步与复制技术

美国Sybase公司研制的一种关系型数据库系统,是一种典型的UNIX或WindowsNT平台上客户机/服务器环境下的大型数据库系统. Sybase提供了一套应用程序编程接口和库,可以与非Sybase数据源及服务器集成,允许在多个数据库之间复制数据,适于创建多层应用.系统具有完备的触发器.存储过程.规则以及完整性定义,支持优化查询,具有较好的数据安全性.Sybase通常与SybaseSQLAnywhere用于客户机/服务器环境,前者作为服务器数据库,后者为客户机数据库,采用该公司研制的PowerB

MySQL 传统复制中常见故障处理和结构优化案例分析

虽然MySQL5.7 的主从复制已经很稳定了,但在备库可读写的情况下,总是会出现部分数据不一致的情况,例如常见的1062.1032和1050错误.下面就介绍下这类报错的常见处理方法和常见主从复制结构的调整. 环境描述 1.mysql 5.7 以上, 2.binlog format 是row格式(5.7默认) 3.传统复制(生产强烈推荐使用gtid) 4.log-bin , log_slave_updates 开启 5.复制结构:101:3306> 103:3306 > 104:3306 常见主

MYSQL的master/slave数据同步配置的例子

我的测试环境.基本上数据是瞬间同步,希望对大家有帮助 redhat 9.0 mysql3.23.57 mysql数据同步备份 A服务器: 192.168.1.2 主服务器master B服务器: 192.168.1.3 副服务器slave A服务器设置 #mysql –u root –p mysql>GRANT FILE ON *.* TO backup@192.168.1.3 IDENTIFIED BY '1234'; mysql>\exit 上面是Master开放一个账号backup密码1

大数据开发套件中数据同步-日志报错回滚信息的一些问题总结

在使用大数据开发套件时最常用的就是数据同步模块,工单里最常见的问题就是其中数据同步的问题,这里总结一些常见一些从MaxCompute(原名ODPS)到其他数据源的同步任务报错案例,主要是日志中出现数据回滚写入的问题. 那首先看下日志中数据回滚的原因,当数据写入rds或者hybridDB等一些支持事务的数据库中,数据批量写入,一旦由于各种原因没有写入成功,这个批次的数据会回滚重新写入,如果再次写入失败,就会报脏数据的错误导致任务失败.数据写入失败可能是以下原因导致回滚.1,脏数据(数据值超过数据类

Mysql 5.7中数据量更改统计数据收集的逻辑

今天一个朋友在问Mysql数据修改后什么时候收集统计数据,我就简单的找了一下源代码,现总结如下.如有错误请指出,因为我只是简单做了一下调试. 一.持久化(PERSISTENT))与非持久化统计数据(TRANSIENT) Mysql统计数据分为持久化和非持久化 持久化统计数据 存储在mysql.innodb_index_stats和mysql.innodb_table_stats中 非持久化统计数据 存储在information_schema.indexes和information_schema.

mysql 5.5中的半同步复制

先来看下MYSQL异步复制的概念:   异步复制:MySQL本身支持单向的.异步的复制.异步复制意味着在把数据从一台机器拷贝到另一台机器时有一个延时 – 最重要的是这意味着当应用系统的事务提交已经确认时数据并不能在同一时刻拷贝/应用到从机.通常这个延时是由网络带宽.资源可用性和系统负载决定的.然而,使用正确的组件并且调优,复制能做到接近瞬时完成.      当主库有更新的时候,主库会把更新操作的SQL写入二进制日志(Bin log),并维护一个二进制日志文件的索引,以便于日志文件轮回(Rotat

mysql 触发器实现两个表的数据同步_Mysql

mysql通过触发器实现两个表的同步 目前,在本地测试成功. 假设本地的两个数据库a和b,a下有表table1(id, val) b下有表table2(id, val) 假设希望当table1中数据更新,table2中数据同步更新. 代码: DELIMITER $$ CREATE /*[DEFINER = { user | CURRENT_USER }]*/ TRIGGER `a`.`触发器名` BEFORE UPDATE ON `a`.`table1` FOR EACH ROW BEGIN I