`
丁林.tb
  • 浏览: 797064 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MySQL多线程同步MySQL-Transfer介绍

阅读更多

一、关于Transfer

MySQL-Transefer(下称Transfer)是一个基于MySQL+patch后得到的主从同步工具。
其主要目的是为了解决原生版本的主从同步里,从库是单线程apply主库的binlog,导致的延迟。

最近完成测试的版本将multi-master (by P.Linux)合并到Transfer中并针对支付宝的应用需求做了定制性能改进。

这里做一个已经完成的完整功能介绍。

二、总体结构

 
 

说明:
1、Transfer可以注册成多个Master的从库
2、Transfer接收多个Master传入的binlog后将更新执行到Slave上
3、Transfer本地没有数据

如果你没有多主的需求,那结构就是Master -> Transfer -> Slave.

三、内部结构

      既然是单线程造成的主从延迟,提升就需要用多线程来实现。

  我们来看单主情况下的内部实现。

 

说明:左上角是Master, 右上角是Transfer,下面是Slave。

 

四、增加参数及对应说明

在my.cnf中新增如下几个参数:

remote_slave_hostname = Ip of Slave
remote_slave_username = root
remote_slave_password = root
remote_slave_port = Port of Slave
stop_slave_on_error = 1
remote_table_maps_file = ./table_maps
transfer_slave_thread = 10 

说明:

1、  前四个是目标slave库的认证信息
2、  Stop_slave_on_error 一般建议配置为1,表示只要有一个线程执行出错,所有slave_io_thread都停止

3、  remote_table_maps_file路径指向本地文件,文件中每行格式为 “表1 表2”,表示在Transfer做同步时,将Master上所有对表1的操作都更新到表2.

4、  transfer_slave_thread是一个只读参数,控制Transfer有多少个线程做并发更新(若为1则表示串行更新,性能与官方版本相同)。一般建议配置为系统核数2倍。

 

 

五、一些说明

1、由于Transfer是在MySQL基础上打的patch,因此支持几乎所有MySQL的监控命令,你原来加在Slave上的监控,可以直接改到Transfer上。

2、             一般我们将Transfer和Slave放在同一个机器上(等于是装两个MySQL,一个是Transfer,一个是真正的slave)

3、             Transfer按照表名hash将不同表的更新分配到不同的线程,因此在多表环境下才能看得到性能提升

4、             Master的binlog格式必须设置成row

5、             若需要用到多个Master,给每个Master命令一个channel,命令序列为 change master channel1 to master_log_file=xxx…… ; start slave channel1; 可以单独对一个chanel执行start\stop等命令

6、             若只需要一个master,则语法格式不变

 六、性能效果

测试场景如下,在Master上的16个表并发分别插入10w行。期间先停止同步。插入完成后,再分别测试直接用原生版本主从和Transfer的性能。

主库插入耗时66.1s 。

 

耗时

平均tps

MySQL主从

363s

4402/s

Transfer同步

66s

24242/s

 

七、Patch应用

下载地址。 基于5.1.48,   patch –p0 < transfer_mysql.diff. 后续安装步骤与原生MySQL相同.

示例my.cnf 从此下载,记得修改程序安装目录。

1
0
分享到:
评论

相关推荐

    mysql-connector-java-8.0.28 jar包

    8. **多线程优化**:优化了多线程环境下的性能,适应并发访问场景。 9. **自动重连**:在网络不稳定或数据库服务器重启时,自动尝试重新建立连接,保证应用的连续性。 在实际开发中,使用mysql-connector-java-...

    MySQL异步复制延迟解决的架构设计与运维架构

    MySQL 5.6版本对主从同步进行了官方改进,引入了多线程复制功能,旨在提高复制效率,减少延迟。 **主要思路:** - 按照数据库(Schema)划分多个线程进行并行处理。 **主要策略:** - 对于能够并行执行的操作,尽...

    MySQL 主从原理、问题、解决方案和应用-淘宝大牛丁奇

    ### MySQL 主从原理、问题、解决方案和应用 #### 一、MySQL主从同步基本流程 在MySQL中,主从同步是一种常见的数据复制机制,...无论是采用多线程更新还是引入Transfer这样的工具,都能够显著改善主从同步的效率。

    transfer.2.2-based-PS-5.5

    《MySQL主从复制与多线程操作工具transfer.2.2在MySQL 5.5环境中的应用》 在数据库管理领域,数据的高可用性和一致性是至关重要的。MySQL作为广泛应用的关系型数据库系统,其主从复制功能是实现数据冗余和故障恢复...

    db-transfer-schedular:此仓库将数据库实时更新从mysql数据库传输到MSsql数据库

    【db-transfer-schedular】是一个基于Java开发的项目,其主要功能是实现实时的数据迁移,将MySQL数据库中的数据更新同步到Microsoft SQL Server数据库。这个工具对于那些需要跨数据库平台同步数据的组织来说非常有用...

    MySQL 主从原理、问题、解决方案和应用——丁奇.pdf

    Transfer本质上也是一个MySQL实例,它作为主服务器的从服务器接收日志,然后将日志更新到目标从服务器上,以此实现多线程更新。 - **Transfer的作用:** Transfer接收主服务器的日志后,将其分成多个relay-log文件...

    基于python的ftp项目(含数据库,含多线程,含socketserver)

    在本项目中,我们主要探讨的是一个基于Python实现的FTP(File Transfer Protocol)服务器,它融合了数据库存储、多线程处理以及SocketServer模块。FTP是互联网上广泛使用的文件传输协议,允许用户从远程服务器上传、...

    MySQL_主从原理问题解决方案和应用

    3. **多线程与单线程处理差异**:主服务器可能使用多线程处理事务,而从服务器默认只使用单线程进行日志的重放,这种差异也会造成延迟。 #### 三、解决方案一:多线程更新 为了解决上述问题,一种常见的方法是将从...

    2022年运维面试题含答案.pdf

    【运维工程师面试题】涉及到多个运维领域的知识点,主要包括MySQL的安全配置、主从复制原理与优势、用户权限管理和数据库备份恢复等。以下是对这些知识点的详细解释: 1. 提高MySQL安全级别的方法: - 修改默认...

    周彦伟 - PXC与QMHA,去哪儿网MySQL数据库架构的哼哈二将

    PXC能够提供同步复制,支持多线程从节点,并且在不使用虚拟IP(VIP)的情况下也可以实现故障转移操作。PXC还支持基于证书的复制,确保事务的原子性、全局有序性和群组通信,允许事务以全局事务标识(GTID)的方式...

    毕业设计,基于异构数据的数据同步与迁移系统,数据离线同步改进版.zip

    8. **性能优化**:考虑到大数据量同步可能带来的性能挑战,系统需要考虑批量处理、多线程或分布式处理等优化策略。 9. **用户界面或命令行工具**:为了方便用户配置和监控同步任务,系统可能提供图形用户界面或...

    c++服务器开发精髓,三个具体案例解析.docx

    - **线程同步与互斥**:使用互斥量(mutex)、条件变量(condition variable)等工具,确保数据在多线程环境中的安全性。 - **线程池技术**:预先创建一组线程,任务到来时分配给空闲线程,减少线程频繁创建和销毁...

    远光软件股份有限公司 最新复试题

    - **线程同步**:是指控制多个线程访问共享资源的方式,避免数据不一致性的问题。 - 实现线程同步的方法包括使用`synchronized`关键字、`ReentrantLock`等。 #### HTTP协议 - **HTTP**(HyperText Transfer ...

    Percona-XtraDB-Cluster-5.7.17-29.20

    Percona XtraDB Cluster是一款基于MySQL的数据库集群解决方案,它能够保证数据库的高可用性、防止服务中断和数据丢失,同时也支持对不断增长环境的线性扩展。该集群解决方案特别适用于需要高可靠性和无缝扩展能力的...

    python编写的端口扫描器

    在本项目中,我们将探讨如何利用Python实现多线程的TCP、UDP端口扫描以及C段扫描,并介绍一些常见的TCP端口及其对应的服务。 1. **多线程TCP端口扫描** 在Python中,我们可以使用socket模块来创建TCP连接并检测...

    毕设项目:基于springboot+mysql+Dijkstra算法实现物流优化管理系统.zip

    8. **Java编程语言**:SpringBoot是基于Java的,因此项目的主体代码应该是用Java编写的,涉及到面向对象编程、异常处理、集合框架、多线程等Java核心概念。 9. **JSON数据格式**:在前后端交互中,数据通常以JSON...

    java工程师面试题大全

    - `Vector`是线程安全的,`ArrayList`不是。 - **数据增长**: - `Vector`默认增长为原来的两倍,而`ArrayList`则是原来的1.5倍。 - **性能**: - `ArrayList`在大多数情况下性能更好,因为它不需要同步操作。 ###...

    JAVA宝典.docx

    - 一种原子操作,用于实现线程之间的同步。 - CAS操作包含三个参数:内存位置(V)、预期原值(A)和新值(B),只有当V的值等于A时,才会将V的值改为B,否则不做任何操作。 #### 四、线程与线程池 - **线程池**: - ...

Global site tag (gtag.js) - Google Analytics