再讲Mysql主从延迟(外赠MySQL异地多活的数据双向复制经验.pdf)

数据库的集群架构都不陌生了,最熟悉也是应用最广泛的就是咱们熟知的主从,今天大概的回味下:

主从复制

MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。

每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新,以便从服务器可以对其数据拷贝执行相同的更新。

从架构图中我们可以分析,在大并发量较大的情况下,会出现主从复制延迟这种问题,如何解决?目前已经有了比较成熟的方案。

主从复制原理图:

步骤1: 所有数据更新都会被主库记录到主库的二进制日志。

步骤2: 与此同时从库的IO线程会从主库上读取二进制日志,写入到从库的中继日志上。

步骤3: 从库的SQL线程读取中继日志上的内容来更新从库。

造成延迟的原因

1、并发较大的情况下,master产生的DDL和DML数量大于salve的可接受数。从库的Slave_SQL_Running是单线程作业,不能并发执行,所以当主库的TPS并发较高时,就容易产生延迟。

2、slave将主库的DDL和DML操作在slave实施。DML和DDL的IO操作是随即的,不是顺序的,成本高很多,还可能可slave上的其他查询产生lock争用,所以一个DDL卡主了,需要执行10分钟,那么所有之后的DDL会等待这个DDL执行完才会继续执行,这就导致了延时。

<DML(data manipulation language): 
它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言。 

DDL(data definition language): 
DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用。

DCL(Data Control Language): 
是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL >

如何解决?

1、减少slave同步延时的方案就是在架构上做优化,尽量让主库的DDL快速执行

2、主库写对数据安全性较高,比如sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置,而slave则不需要这么高的数据安全,完全可以将sync_binlog设置为0或者关闭binlog,innodb_flushlog也可以设置为0来提高sql的执行效率

3、使用比主库更好的硬件设备作为slave

4、使用mysql5.7 参看 《MySQL 5.7 并行复制实现原理与调优

5、分库分表 http://www.cnblogs.com/hackxhao/p/5496254.html

这两篇文章写的很好,需要好好拜读!!

pdf获取链接:http://pan.baidu.com/s/1pLwRf4n

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏吴生的专栏

MySQL 慢日志线上问题分析及功能优化

MySQL 慢日志(slow log)是 MySQL DBA 及其他开发、运维人员需经常关注的一类信息。使用慢日志可找出执行时间较长或未走索引等 SQL 语句,...

5126
来自专栏杨建荣的学习笔记

关于视图和存储过程的权限问题探究 (r9笔记第87天)

今天在处理一个工单的时候发现了一个奇怪的现象,开发同学需要创建一个存储过程,目前的架构类似这样的形式 ? 数据库中存在一个属主用户,表,存储过程等对象...

35810
来自专栏IT技术精选文摘

MySQL高可用方案

第一种:主从复制+读写分离 客户端通过Master对数据库进行写操作,slave端进行读操作,并可进行备份。Master出现问题后,可以手动将应用切换到slav...

4248
来自专栏MYSQL轻松学

MYSQL数据闪回方式

MYSQL官方截止目前还没有出来数据闪回特性,也许后续版本会出现。社区有一些开源工具可以使用,沿用的基本都是彭立勋最早提出的思路,利用binlog对SQL进行反...

4248
来自专栏Java后端生活

MySQL(一)数据库的简单介绍

1888
来自专栏CaiRui

Zabbix监控详解

Zabbix是什么 Zabbix 是由Alexei Vladishev创建,目前由Zabbix SIA在持续开发和支持。 Zabbix 是一个企业级的分布式开源...

1.9K8
来自专栏Java架构师历程

MYSQL 谈谈各存储引擎的优缺点

1、存储引擎其实就是如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法。

2822
来自专栏小怪聊职场

MySQL(六)|《千万级大数据查询优化》第二篇:查询性能优化(2)

3099
来自专栏云计算教程系列

如何在CentOS上安装MySQL

MySQL是一种流行的数据库管理系统,用于Web和服务器应用程序。本教程将介绍如何在CentOS 6上安装,配置和管理MySQL。

2327
来自专栏跟着阿笨一起玩NET

MySQL第三方客户端工具

如前所述,MySQL是一个基于客户机--服务器的DBMS,因此,为了使用MySQl,你需要有一个客户机软件给MySQL提供要执行的命令。即你需要一个编写和测试M...

1.1K1

扫码关注云+社区

领取腾讯云代金券