半同步主从复制

半同步主从复制的概念

半同步主从复制(Semisynchronous Replication, SBR)是MySQL数据库中的一种数据复制方式,它在异步复制的基础上增加了一定程度的同步性,旨在提高数据安全性,减少数据丢失的风险。

半同步主从复制的原理

  1. 主服务器(Master)操作:客户端向主服务器发起写操作(如INSERT、UPDATE、DELETE等)。主服务器执行这些操作,并将它们封装在一个或多个事务中。事务完成后,主服务器将事务的所有更改记录到其本地的二进制日志(Binary Log, binlog)。
  2. binlog记录与传输:主服务器上运行的log dump线程负责通知从服务器来拿取二进制日志。
  3. 等待从服务器确认:与异步复制不同,半同步复制要求主服务器在提交事务后,等待至少一个从服务器的确认。即从服务器必须在接收到二进制日志并写入到中继日志(Relay Log)后将结果反馈给主服务器。主服务器接收到确认后,才将事务commit写入磁盘中。
  4. 从服务器操作:从服务器启动一个I/O线程,该线程连接到主服务器并请求从某个特定的binlog位置(如最后一次同步的位置)开始复制。I/O线程接收到主服务器发来的二进制日志后,将其写入到从服务器本地的中继日志。当I/O线程将二进制日志写入中继日志后,会向主服务器发送一个确认消息,表明已成功接收并持久化该事件。
  5. SQL线程执行:另一个在从服务器上运行的SQL线程负责读取中继日志中的事件,并按照事件在binlog中的顺序在从服务器上重新执行这些操作,以保持数据的一致性。

半同步主从复制的操作

1、环境准备

需要两台搭建好异步主从复制的服务器。

2、master服务器配置

sql 复制代码
// 主服务器安装半同步插件
root@(none) master-mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

// 修改配置
root@(none) master-mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1;
root@(none) master-mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;

[root@master ~] vim /etc/my.cnf
# 添加
[mysqld]
rpl_semi_sync_master_timeout=1000
rpl_semi_sync_master_enabled=1

// 刷新服务
[root@master ~] service mysqld restart

3、slave服务器配置

sql 复制代码
// 主服务器安装半同步插件
root@(none) slave-mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

// 修改配置
root@(none) slave-mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;

[root@slave ~] vim /etc/my.cnf
# 添加
[mysqld]
rpl_semi_sync_slave_enabled=1

// 刷新服务
[root@slave ~] service mysqld restart

延迟备份

延迟备份的作用如下:

1. 数据恢复与容灾

  • 误操作恢复:在生产环境中,由于人为误操作(如误删除数据、表或库)导致的数据丢失是常见的风险。延迟备份允许在误操作发生前的一个时间点停止复制,从而保留误操作之前的数据状态,便于数据恢复。这一点对于避免数据灾难至关重要。
  • 容灾备份:延迟备份可以作为额外的容灾手段,即使主库或实时备份库出现问题,延迟备份库也能提供一定时间前的数据快照,保障数据的安全性和可恢复性。

2. 减轻主库压力

  • 降低同步负载:在高并发或大数据量环境下,实时同步可能会对主库造成较大的性能压力,包括I/O压力、CPU负载等。延迟备份通过控制同步的时机和频率,可以有效减轻主库的压力,避免影响主库的正常业务处理。

其具体操作如下:

// 在slave服务器上操作
root@(none) slave-mysql> stop slave;
// 这里的10为延迟10秒
root@(none) slave-mysql> CHANGE MASTER TO MASTER_DELAY = 10;
root@(none) slave-mysql> start slave;
相关推荐
cyt涛1 小时前
MyBatis 学习总结
数据库·sql·学习·mysql·mybatis·jdbc·lombok
Rookie也要加油2 小时前
01_SQLite
数据库·sqlite
liuxin334455662 小时前
教育技术革新:SpringBoot在线教育系统开发
数据库·spring boot·后端
看山还是山,看水还是。3 小时前
MySQL 管理
数据库·笔记·mysql·adb
fishmemory7sec3 小时前
Koa2项目实战2(路由管理、项目结构优化)
数据库·mongodb·koa
momo小菜pa3 小时前
【MySQL 09】表的内外连接
数据库·mysql
Jasonakeke3 小时前
【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化
数据库·mysql
程序猿小D3 小时前
第二百六十九节 JPA教程 - JPA查询OrderBy两个属性示例
java·开发语言·数据库·windows·jpa
小宇成长录3 小时前
Mysql:数据库和表增删查改基本语句
数据库·mysql·数据库备份
团儿.4 小时前
解锁MySQL高可用新境界:深入探索MHA架构的无限魅力与实战部署
数据库·mysql·架构·mysql之mha架构