数据库实例复制是指通过为服务器配置一个或多个备份数据库的方式来进行数据同步,将 MySQL 的数据分布到多个系统上去。本文为您介绍云数据库 MySQL 支持的数据复制方式以及 TXSQL 内核针对数据同步的优化。
说明:
Master 是指主数据库实例,Slave 是指备份数据库实例。
MySQL 5.6、5.7、8.0 版本支持三种复制方式:异步、半同步、强同步;5.5 版本支持异步方式。
云数据库 MySQL 支持的数据复制方式
一、异步复制
应用发起数据更新(含 insert、update、delete 操作)请求,Master 在执行完更新操作后立即向应用程序返回响应,然后 Master 再向 Slave 复制数据。数据更新过程中 Master 不需要等待 Slave 的响应,因此异步复制的数据库实例通常具有较高的性能,且 Slave 不可用并不影响 Master 对外提供服务。但因数据并非实时同步到 Slave,而 Master 在 Slave 有延迟的情况下发生故障则有较小概率会引起数据不一致。
腾讯云数据库 MySQL 异步复制采用一主一备的架构。
二、半同步复制
应用发起数据更新(含 insert、update、delete 操作)请求,Master 在执行完更新操作后立即向 Slave 复制数据,Slave 接收到数据并写到 relay log 中(无需执行)后才向 Master 返回成功信息,Master 必须在接受到 Slave 的成功信息后再向应用程序返回响应。
仅在数据复制发生异常(Slave 节点不可用或者数据复制所用网络发生异常)的情况下,Master 会暂停(MySQL 默认10秒左右)对应用的响应,将复制方式降为异步复制。当数据复制恢复正常,将恢复为半同步复制。
腾讯云数据库 MySQL 半同步复制采用一主一备的架构。
三、强同步复制
应用发起数据更新(含 insert、update、delete 操作)请求,Master 在执行完更新操作后立即向 Slave 复制数据,Slave 接收到数据并写到 relay log 中(执行完成)后才向 Master 返回成功信息,Master 必须在接受到 Slave 的成功信息后再向应用程序返回响应。
在数据复制发生异常(Slave 节点不可用或者数据复制所用网络发生异常)的情况下,复制方式均不会发生降级,为保障数据一致性,此时 Master 会暂停对应用的响应,直至异常结束。
腾讯云数据库 MySQL 强同步复制采用一主两备的架构,仅需其中一台 Slave 成功执行即可返回,避免了单台 Slave 不可用影响 Master 上操作的问题,提高了强同步复制集群的可用性。
TXSQL 内核针对数据同步的优化
存在问题
当 Master 或 Slave 不可用时,异步复制、半同步复制、强同步复制方式均有几率引起数据不一致。
数据库作为系统数据存储和服务的核心能力,其可用性要求非常高。在生产系统中,通常都需要用高可用方案来保证系统不间断运行,而数据同步技术是数据库高可用方案的基础。
优化方案
强同步复制方案是腾讯自主研发的基于 MySQL 协议的并行多线程强同步复制方案,只有当备库数据完全同步(日志)后,才由主库给予应用事务应答,保障数据正确安全。
原理示意图如下:
在应用层发起请求时,只有当备库实例(Slave)返回信息成功后,主库实例(Master)才向应用层应答请求成功,以确保主备节点数据完全一致。
强同步方案在性能上优于其他主流同步方案,主要特点如下:
一致性的同步复制,保证节点间数据强一致性。
对业务层面完全透明,业务层面无需做读写分离或同步强化工作。
将串行同步线程异步化,引入线程池能力,大幅度提高性能。
支持集群架构。
支持自动成员控制,故障节点自动从集群中移除。
支持自动加入节点,无需人工干预。
每个节点都包含完整的数据副本,可以随时切换。
无需共享存储设备。