mysql怎么保证主备同步
mysql读写分离后,可以采用mysql集群方案中的主备模式保证数据同步。
首先将之前两个数据库实例按主备模式部署好。
其次按主写备读的方式进行读写分离配置。
最后设置主备同步方式,按binlog文件同步数据,并设置好同步数据的频率。
mysql主备同步原理
MySQL主备同步是指将主库的数据同步到备库,保持主备数据库的数据一致性。主备同步的原理主要包括以下几个方面:
1. 二进制日志(binlog):主库将所有的数据更新操作以二进制日志的形式记录下来,包括插入、更新、删除等操作。
2. 主备复制线程:备库启动一个I/O线程与主库建立连接,并请求从主库获取binlog同步。
3. binlog解析:备库的I/O线程将主库的binlog读取到本地,然后解析出数据操作语句。
4. 重放:备库将解析出的数据操作语句在备库上执行,重放主库的数据更新操作。
5. 并发控制:备库在重放数据操作语句时,需要进行并发控制,避免数据冲突。
6. 传递元数据:备库将主库的元数据(如表结构信息)同步到备库上。
7. 心跳检测:主备库之间通过心跳机制实时检测彼此的状态,保证主备库的连接畅通。
通过以上主备同步的机制,可以保证主库的数据更新操作会被同步到备库,从而实现主备数据库的数据一致性。
MySQL主备同步是通过将主库的二进制日志(binlog)发送到备库进行重放来实现的。
主库将数据更改操作记录到binlog中,备库通过连接主库并获取binlog,然后将其重放以在备库上复制相同的更改。
备库定期向主库发送心跳以保持连接并检查是否有新的binlog可用。如果主库发生故障,备库可以接管并继续提供服务。
mysql主主同步优缺点
在主主模式下,两个主库都提供读写服务,如果应用通过两个主库操作相同数据,则会发生冲突导致数据覆盖(使用语句模式复制)或复制异常(使用行模式复制),因此需要对读写服务进行控制:
1、基于自主主键控制,通过设置自增属性auto_increment_offset和auto_increment_increment来控制每个主节点生产不同的自增值,并根据不同自增值访问不同主节点。
2、基于库级别或表级别控制,如应用APP1访问节点node1上的DB1库,而应用APP2访问节点node2上的DB2库,两个主节点间不会操作相同表的数据,因此不会存在事务冲突。
为保证应用程序使用相同数据库连接配置而不受故障切换影响,常用方案有:
1、VIP,通过vrrpd或keepalived将VIP动态绑定到新主节点
2、域名,通过切换域名将域名指向新主节点
3、代理,通过更新代理中存放的路由信息来指向新主节点。