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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
安全 关系型数据库 MySQL
如何将数据从MySQL同步到其他系统
【10月更文挑战第17天】如何将数据从MySQL同步到其他系统
190 0
|
29天前
|
NoSQL 关系型数据库 MySQL
2024Mysql And Redis基础与进阶操作系列(4-2)作者——LJS[含MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法]
24MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法(4-2) 学不会你来砍我!!!
|
29天前
|
NoSQL 安全 关系型数据库
2024Mysql And Redis基础与进阶操作系列(6)作者——LJS[含MySQL 多表之一对一/多;多对多;多表联合查询等详解步骤及常见报错问题所对应的解决方法]
MySQL 多表之一对一/多;多对多;多表联合之交叉连接;内连接;左、右、外、满、连接;子查询及关键字;自连接查询等详解步骤及常见报错问题所对应的解决方法
|
29天前
|
SQL NoSQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(5)作者——LJS[含MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页等详解步骤及常见报错问题所对应的解决方法]
MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页、INSERT INTO SELECT / FROM查询结合精例等详解步骤及常见报错问题所对应的解决方法
|
29天前
|
SQL NoSQL 关系型数据库
|
29天前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
29天前
|
SQL 关系型数据库 MySQL
|
28天前
|
存储 SQL NoSQL
|
28天前
|
NoSQL 关系型数据库 MySQL
2024Mysql And Redis基础与进阶操作系列(8)作者——LJS[含MySQL 创建、修改、跟新、重命名、删除视图等具体详步骤;注意点及常见报错问题所对应的解决方法]
MySQL 创建、修改、跟新、重命名、删除视图等具体详步骤;举例说明注意点及常见报错问题所对应的解决方法
|
28天前
|
SQL NoSQL 关系型数据库