一、关于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 从此下载,记得修改程序安装目录。
分享到:
相关推荐
8. **多线程优化**:优化了多线程环境下的性能,适应并发访问场景。 9. **自动重连**:在网络不稳定或数据库服务器重启时,自动尝试重新建立连接,保证应用的连续性。 在实际开发中,使用mysql-connector-java-...
MySQL 5.6版本对主从同步进行了官方改进,引入了多线程复制功能,旨在提高复制效率,减少延迟。 **主要思路:** - 按照数据库(Schema)划分多个线程进行并行处理。 **主要策略:** - 对于能够并行执行的操作,尽...
### MySQL 主从原理、问题、解决方案和应用 #### 一、MySQL主从同步基本流程 在MySQL中,主从同步是一种常见的数据复制机制,...无论是采用多线程更新还是引入Transfer这样的工具,都能够显著改善主从同步的效率。
《MySQL主从复制与多线程操作工具transfer.2.2在MySQL 5.5环境中的应用》 在数据库管理领域,数据的高可用性和一致性是至关重要的。MySQL作为广泛应用的关系型数据库系统,其主从复制功能是实现数据冗余和故障恢复...
【db-transfer-schedular】是一个基于Java开发的项目,其主要功能是实现实时的数据迁移,将MySQL数据库中的数据更新同步到Microsoft SQL Server数据库。这个工具对于那些需要跨数据库平台同步数据的组织来说非常有用...
Transfer本质上也是一个MySQL实例,它作为主服务器的从服务器接收日志,然后将日志更新到目标从服务器上,以此实现多线程更新。 - **Transfer的作用:** Transfer接收主服务器的日志后,将其分成多个relay-log文件...
在本项目中,我们主要探讨的是一个基于Python实现的FTP(File Transfer Protocol)服务器,它融合了数据库存储、多线程处理以及SocketServer模块。FTP是互联网上广泛使用的文件传输协议,允许用户从远程服务器上传、...
3. **多线程与单线程处理差异**:主服务器可能使用多线程处理事务,而从服务器默认只使用单线程进行日志的重放,这种差异也会造成延迟。 #### 三、解决方案一:多线程更新 为了解决上述问题,一种常见的方法是将从...
【运维工程师面试题】涉及到多个运维领域的知识点,主要包括MySQL的安全配置、主从复制原理与优势、用户权限管理和数据库备份恢复等。以下是对这些知识点的详细解释: 1. 提高MySQL安全级别的方法: - 修改默认...
PXC能够提供同步复制,支持多线程从节点,并且在不使用虚拟IP(VIP)的情况下也可以实现故障转移操作。PXC还支持基于证书的复制,确保事务的原子性、全局有序性和群组通信,允许事务以全局事务标识(GTID)的方式...
8. **性能优化**:考虑到大数据量同步可能带来的性能挑战,系统需要考虑批量处理、多线程或分布式处理等优化策略。 9. **用户界面或命令行工具**:为了方便用户配置和监控同步任务,系统可能提供图形用户界面或...
- **线程同步与互斥**:使用互斥量(mutex)、条件变量(condition variable)等工具,确保数据在多线程环境中的安全性。 - **线程池技术**:预先创建一组线程,任务到来时分配给空闲线程,减少线程频繁创建和销毁...
- **线程同步**:是指控制多个线程访问共享资源的方式,避免数据不一致性的问题。 - 实现线程同步的方法包括使用`synchronized`关键字、`ReentrantLock`等。 #### HTTP协议 - **HTTP**(HyperText Transfer ...
Percona XtraDB Cluster是一款基于MySQL的数据库集群解决方案,它能够保证数据库的高可用性、防止服务中断和数据丢失,同时也支持对不断增长环境的线性扩展。该集群解决方案特别适用于需要高可靠性和无缝扩展能力的...
在本项目中,我们将探讨如何利用Python实现多线程的TCP、UDP端口扫描以及C段扫描,并介绍一些常见的TCP端口及其对应的服务。 1. **多线程TCP端口扫描** 在Python中,我们可以使用socket模块来创建TCP连接并检测...
8. **Java编程语言**:SpringBoot是基于Java的,因此项目的主体代码应该是用Java编写的,涉及到面向对象编程、异常处理、集合框架、多线程等Java核心概念。 9. **JSON数据格式**:在前后端交互中,数据通常以JSON...
- `Vector`是线程安全的,`ArrayList`不是。 - **数据增长**: - `Vector`默认增长为原来的两倍,而`ArrayList`则是原来的1.5倍。 - **性能**: - `ArrayList`在大多数情况下性能更好,因为它不需要同步操作。 ###...
- 一种原子操作,用于实现线程之间的同步。 - CAS操作包含三个参数:内存位置(V)、预期原值(A)和新值(B),只有当V的值等于A时,才会将V的值改为B,否则不做任何操作。 #### 四、线程与线程池 - **线程池**: - ...