MySQL主从同步延迟原因与解决方法

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: MySQL主从同步延迟原因与解决方法

一、MySQL主从同步延迟原因

MySQL主从复制是单线程,DDL和DML操作产生的日志都会写进binlog,由于binlog的机制是顺序写,所以速度很快。

但是Slave的SQL Thread线程将主库的DDL和DML操作事件在slave中重放。在从库上DML和DDL的IO操作是随即的,所以有时间很缓慢。且SQL Thread是单线程,当主库的并发较高时,产生的DML数量超过slave的SQL Thread所能处理的速度,或者当slave中有大型query语句产生了锁等待那么延时就产生了。

常见的原因有几个:

Master负载过高

Slave负载过高

网络延迟

机器性能太低

MySQL配置不合理

二、DDL和DML的概念

SQL语言共分为以下几大类:

DQL(Data QUERY Languages)语句:即数据库定义语句,用来查询SELECT子句,FROM子句,WHERE子句组成的查询块,比如:select–from–where–grouop by–having–order by–limit

DDL(Data Definition Languages)语句:即数据库定义语句,用来创建数据库中的表、索引、视图、存储过程、触发器等,常用的语句关键字有:CREATE,ALTER,DROP,TRUNCATE,COMMENT,RENAME。增删改表的结构

DML(Data Manipulation Language)语句:即数据操纵语句,用来查询、添加、更新、删除等,常用的语句关键字有:SELECT,INSERT,UPDATE,DELETE,MERGE,CALL,EXPLAIN PLAN,LOCK TABLE,包括通用性的增删改查。增删改表的数据

DCL(Data Control Language)语句:即数据控制语句,用于授权/撤销数据库及其字段的权限(DCL is short name of Data Control Language which includes commands such as GRANT and mostly concerned with rights, permissions and other controls of the database system.)。常用的语句关键字有:GRANT,REVOKE。

TCL(Transaction Control Language)语句:事务控制语句,用于控制事务,常用的语句关键字有:COMMIT,ROLLBACK,SAVEPOINT,SET TRANSACTION。

三、主从延时排查方法

主要查看Seconds_Behind_Master参数的值来判断。NULL表示io_thread或是sql_thread有任何一个发生故障;0,该值为零,表示主从复制良好;>0的数字表示主从延时,数字越大表示从库延迟越大

四、解决方案

使用半同步复制,主库配置 (也就是双1操作)    

sync_binlog=1,

innodb_flush_log_at_trx_commit=1

4.1 解决从库复制延迟的问题:

架构进行优化

业务的持久化层的实现采用分库架构,mysql服务可平行扩展,分散压力。

单个库读写分离,一主多从,主写从读,分散压力。这样从库压力比主库高,保护主库。

服务的基础架构在业务和mysql之间加入redis的cache层。降低mysql的读压力。

不同业务的mysql物理上放在不同机器,分散压力。

使用比主库更好的硬件设备作为slave,mysql压力小,延迟自然会变小。

使用性能好一点的硬件设施

存储用SSD,提升随机写的性能。

mysql主从同步加速

1.sync_binlog在slave端设置为0

2.–logs-slave-updates 从服务器从主服务器接收到的更新不记入它的二进制日志。

3.直接禁用slave端的binlog

4.slave端,如果使用的存储引擎是innodb,innodb_flush_log_at_trx_commit =2

4.2 gtid模式下数据不一致后怎么解决

主库:

mysql>FLUSH TABLES WITH READ LOCK;  

mysql>mysqldump -uroot -p --host=192.168.1.1 --port=3306 --set-gtid-purged=on --single-transaction --all-databases >/root/master-dump.sql

主库备份完成后,将备份文件传至从库。

从库:

mysql>stop slave;

mysql>reset slave all;

mysql>source /root/master-dump.sql

mysql>change master to

master_host='192.168.1.1',

MASTER_PORT=3306,

master_user='repl',

master_password='123123' ,

MASTER_AUTO_POSITION=1;    

# 该参数会自动读取relaylog中的最后一个gtid号,来向主库申请日志, 如未从relaylog中读取到,则从第一个gtid开始同步

# 该参数值代表从哪个gtid号开始请求, 如从库是使用xbk物理恢复的,则此处值需要是恢复文件中最后一个gtid号+1。

也可以在主库执行show global variables like '%gtid%'\G,set @@global.gtid_purged='XXXXX',

然后执行MASTER_AUTO_POSITION=1。

mysql>start slave;

最后执行查看数据是否同步。

mysql>show slave status

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
3月前
|
存储 消息中间件 监控
MySQL 到 ClickHouse 明细分析链路改造:数据校验、补偿与延迟治理
蒋星熠Jaxonic,数据领域技术深耕者。擅长MySQL到ClickHouse链路改造,精通实时同步、数据校验与延迟治理,致力于构建高性能、高一致性的数据架构体系。
MySQL 到 ClickHouse 明细分析链路改造:数据校验、补偿与延迟治理
|
3月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
578 5
|
10月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
9月前
|
监控 Java 关系型数据库
Spring Boot整合MySQL主从集群同步延迟解决方案
本文针对电商系统在Spring Boot+MyBatis架构下的典型问题(如大促时订单状态延迟、库存超卖误判及用户信息更新延迟)提出解决方案。核心内容包括动态数据源路由(强制读主库)、大事务拆分优化以及延迟感知补偿机制,配合MySQL参数调优和监控集成,有效将主从延迟控制在1秒内。实际测试表明,在10万QPS场景下,订单查询延迟显著降低,超卖误判率下降98%。
421 5
|
10月前
|
SQL 关系型数据库 MySQL
【YashanDB 知识库】YashanDB 支持 MySQL 多表更新语句的解决方法
【YashanDB 知识库】YashanDB 支持 MySQL 多表更新语句的解决方法
|
10月前
|
SQL 关系型数据库 MySQL
【YashanDB知识库】YashanDB 支持MySQL多表更新语句的解决方法
本文介绍了在YashanDB中处理MySQL多表更新语句的方法。由于YashanDB默认不支持多表更新(报错YAS-04344),可通过启用兼容性参数`SQL_PLUGIN = 'MYSQL'`解决,或改写SQL语句实现相同功能。文章通过具体示例说明了多种改写方法,包括根据共同列更新单个或多个字段、添加过滤条件以及基于多个共同列的更新场景。涉及的表结构和数据展示了实际操作过程,帮助用户顺利迁移和使用YashanDB。
|
监控 关系型数据库 MySQL
Flink CDC MySQL同步MySQL错误记录
在使用Flink CDC同步MySQL数据时,常见的错误包括连接错误、权限错误、表结构变化、数据类型不匹配、主键冲突和
520 17
|
存储 SQL NoSQL
|
NoSQL 关系型数据库 MySQL
2024Mysql And Redis基础与进阶操作系列(8)作者——LJS[含MySQL 创建、修改、跟新、重命名、删除视图等具体详步骤;注意点及常见报错问题所对应的解决方法]
MySQL 创建、修改、跟新、重命名、删除视图等具体详步骤;举例说明注意点及常见报错问题所对应的解决方法
|
SQL NoSQL 关系型数据库

推荐镜像

更多