MySQL的主从复制有多种原因可以导致延迟,这个是公认的了,下面我们谈谈怎样监测复制的延迟,以及怎样尽量的解决延迟的问题。
延迟的监测
Seconds_behind_master
在SLAVE上执行SHOW SLAVE STATUS,监控Seconds_behind_master列值,备库Seconds_Behind_Master值是通过将服务器当前的时间戳(这里其实有个主从服务器时间差的问题,但是实际上主从在连接上后会做一次主从时间差的对比并记录该偏移量)与二进制日志中的事件时间戳相对比得到的,如果在I/O线程没有延时的情况下,这个还是准的。
Master_Log_Pos
如果I/O有延迟,那么Seconds_behind_master列值就不准确了,这时应该在主库上SHOW MASTER STATUS,记录LogFile和Log Position值,然后再在从库上SHOW SLAVE STATUS,查看Read_Master_Log_Pos和Exec_Master_Log_Pos,看看BinLog在主从上各自的位置,可以知道是否延迟。
利用pt-heartbeat或mk-heartbeat监控工具
该工具可以计算出MySQL复制,它可以更新master或者监控复制,还可以从my.cnf 读取配置。它借助timestmp的比较实现的,首先需要保证主从服务器时间必须要保持一致,通过与相同的一个NTP server同步时钟。它需要在主库上创建一个heartbeat的表,里面的时间戳ts就是当前的时间戳 now(),该结构也会被复制到从库上。表建好以后,会在主库上以后台进程的模式去执行一行更新操作的命令,定期去向表中的插入数据,这 个周期默认为1 秒,同时从库也会在后台执行一个监控命令,与主库保持一致的周期+0.5S(默认0.5S延迟检查)去比较,复制过来记录的ts值与主库上的同一条ts值,差值为0表示无延时,差值越大表示 延时的秒数越多。
利用pt-table-checksum确定主备是否一致
复制延时或网络问题并总是会让主备数据不完全一致。主备一致应该是一种规范,而不是例外,也就是说,检查你的主备一致性应该是一个日常工作,特别是是当使用备库来做备份时尤为重要。pt-table-checksum能够用于确认主备库数据是否一致。
延迟的缓解(只能是缓解而无法彻底解决)
最简单的办法是配置InnoDB
使其不要那么频繁地刷新磁盘,这样事务提交的更快些。设置innodb_flush_log_at_trx_commit=2来实现。还可以在备库上禁止二进制日志记录,把innodb_locks_unsafe_for_binlog设置为1,并把MyISAM的delay_key_write设置为ALL。但是这些设置以牺牲安全换取速度。如果需要将备库提升为主库,记得把这些选项设置回安全值。
不要重要写操作中代价较高的部分
重构应用程序或者优化查询通常是最好的保持备库同步的办法。如果可以把工作转移备库,那么就只有一台备库需要执行,然后我们可以把写的结果回传到主库,例如,通过执行LOAD DATA INFILE。
限制主库过大的包
修改主库max_allowed_packet值,太大的包会使二进制事务变的复杂。
利用MySQL5.5以上的半同步
事实上半同步复制在某些场景下确实能够提供足够的灵活性以改善性能,在主库关闭sync_binlog的情况下保证更加安全。写入远程的内存(一台备库反馈)比写入本地的磁盘(写入并刷新)要更快。有人进行过测试,使用半同步复制相比在主库上进行强持久化的性能有两倍改善。在任何系统上都没有绝对的持久化,只有更高的持久化层次,并且看起来半同步复制应该是一种比其他替代方案开销更小的系统数据持久化方法。
在复制之外并行写入
所有写操作都应该从主库传递到备库?如果能确定一些写入可以轻易地在复制之外执行,就可以并行化这些操作以利用备库的写入容量。例如,一些归档数据,可以在主备上分别进行归档操作。
为复制线程预取缓存
通过程序实现,在SQL线程更新前提前读取中继日志并将其转化为SELECT语句执行。这会使服务器将数据从磁盘加载到内存中,这样SQL线程执行到相应语句时,就无需从磁盘读取数据。
这个办法目前已经有一种工具叫relayfetch,这个主意的想法是通过程序,让他比从服务器的sql线程稍微提前一点在中继日志中读取到查询语句,并将其作为select语句来执行,这导致服务器把一些数据从磁盘读取到内存,因此当从服务器的sql线程从中继日志中执行命令的时候,它就不需要等待从磁盘读取数据。Select并行处理从服务器必须串行处理的I/O。后面会有单独的对这个工作的介绍和使用。
多线程同步
这个办法目前也已经有一种工具叫MySQL-Transefer(下称Transfer),是一个基于MySQL+patch后得到的主从同步工具。该工具的原理是以多线程的方式来读取relaylog更新SlAVE的方式。后面会有单独的对这个工作的介绍和使用。
相关推荐
- **多主监控(Master-Master-Monitor)**:三台机器互相作为对方的主服务器,但存在复制延迟和数据同步问题。 - **一从对多主(One Slave to Multiple Masters)**:这种方式可以节省成本,实现多个主服务器数据的...
MySQL 主从复制与读写分离 MySQL 主从复制是指将一个 MySQL 服务器的数据实时同步到另一个 MySQL 服务器中,以实现数据的高可用性和读写分离。下面是 MySQL 主从复制与读写分离的详细知识点: MySQL 主从复制 ...
"使用keepalived实现对mysql主从复制的主备自动切换" 本文主要讲解如何使用keepalived实现对mysql主从复制的主备自动切换。keepalived是一款高可用性解决方案,可以实现虚拟IP的管理和服务监控,在mysql主从复制...
MySQL 主从复制环境搭建 MySQL 是一个轻量级的开源框架,具有速度快、多线程、多用户和跨平台等特点。MySQL 主从复制是指将一个 MySQL 服务器的数据实时同步到另一个 MySQL 服务器上,通常用于提高数据安全、负载...
- **监控与管理**:定期检查复制延迟,确保数据的一致性,并对复制进程进行监控,以便及时发现并解决问题。 - **安全性**:确保主从复制过程中的数据传输安全,避免敏感信息泄露。 总的来说,SpringBoot与MySQL的...
### MySQL主从复制搭建知识点详解 #### 一、MySQL主从复制概述 MySQL主从复制是一种数据同步机制,它能够将一个MySQL服务器(主服务器)的数据自动同步到一个或多个MySQL服务器(从服务器)。这种机制不仅可以提高...
MySQL主从复制是一种数据库高可用性和数据冗余的重要机制,它允许数据从一个服务器(主节点)同步到一个或多个其他服务器(从节点)。在本实践中,我们将深入探讨这一模式的各个方面,包括其工作原理、配置步骤、...
### MySQL 主从复制详解 #### 一、引言 MySQL 的主从复制是一种常见的数据库架构模式,它能够帮助实现数据的自动备份与读写分离,从而增强数据安全性并提高数据库性能。本文将详细介绍 MySQL 主从复制的基本概念、...
1. Lepus监控工具:这是一个数据库监控系统,专门用来监控MySQL主从复制延迟和慢查询问题。 2. MySQL主从复制延迟:这指的是MySQL数据库在主从架构模式下,从服务器与主服务器之间的数据复制可能存在时间差,而Lepus...
5. **复制延迟**: 由于网络延迟和处理时间,主从库之间通常存在一定的数据延迟。在设计系统时,应考虑这一因素并采取相应措施。 **二、读写分离** 1. **原理**: 读写分离是将读和写操作分开处理,主库负责写操作,...
关于博客: https://blog.csdn.net/qq_42413011/article/details/126914080 的搭建脚本
导读: 作者:高鹏(网名八怪),《深入理解...八怪写作风格很是严谨,几乎每篇都是从源码入手去剖析MySQL主从复制相关的知识点。 强烈推荐大家订阅本专栏 业界大咖推荐序 从2016年开始八怪(本名高鹏)经常向我请教一
docker_compose搭建mysql主从复制
### MySQL主从复制部署实施知识点 #### 一、MySQL主从复制概述 MySQL主从复制是一种数据复制技术,它能够实现在多个服务器之间复制数据。通常包括一个主服务器(Master)和一个或多个从服务器(Slave)。在主从复制...