MySQL之 从复制延迟问题排查

一、从库复制延迟问题

1、可能的原因如下
(1)主从服务器处于不同的网络之中,由于网络延迟导致;
(2)主从服务器的硬件配置不同,从服务器的硬件配置(包括内存,CPU,网卡等)远低于主服务器;
(3)主库上有大量的写入操作,导致从库无法实时重放主库上的binlog;
(4)主库上存在着大事务操作或者慢SQL,导致从库在应用主库binlog的过程过慢,形成延迟;
(5)数据库实例的参数配置问题导致,如:从库开启了binlog,或者配置了每次事务都去做刷盘操作;

2、主从同步延迟问题判断
(1)根据从库上的状态参数判断

mysql-server-3307> SHOW SLAVE STATUS \G

在输出结果中找到Seconds_Behind_Master参数,这个参数表示的是从库上的IO线程和SQL线程相差的时间,然后根据该参数值判断,这个值只是初步判断,不能由这个值来下结论,有如下几种情况:
a、0:表示无延迟,理想状态;
b、NULL:表示从库上的IO线程和SQL线程中,有某一个线程出现问题,可以再次查看Slave_IO_Running和Slave_SQL_Running的值是否都为Yes;
c、大于0:表示主从已经出现延迟,这个值越大,表示从库和主库之间的延迟越严重;
d、小于0:这个值在官方文档中没有说明,通常不会出现。如果出现,那恭喜你中奖了,撞见MySQL的bug了;

(2)根据主从库上面当前应用的二进制日志文件名称或者重放日志的位置来判断
① 同时打开两个MySQL的命令行窗口,分别打开主库和从库,在第一个窗口上执行查看主库当前状态的命令

mysql-server-3306> SHOW MASTER STATUS \G
*************************** 1. row ***************************File: mysql-bin.000017Position: 120Binlog_Do_DB: Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

② 在第二个从库的命令行窗口执行如下命令

mysql-server-3307> SHOW SLAVE STATUS \G
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send event...Connect_Retry: 60Master_Log_File: mysql-bin.000017Read_Master_Log_Pos: 120Relay_Log_File: relay-log.000016Relay_Log_Pos: 283Relay_Master_Log_File: mysql-bin.000017Slave_IO_Running: YesSlave_SQL_Running: Yes...Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 120Relay_Log_Space: 613Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0...Seconds_Behind_Master: 0...Replicate_Ignore_Server_Ids: Master_Server_Id: 3Master_UUID: 2dbbf79b-5d9f-11e8-8004-000c29e28409Master_Info_File: /mysql_data/3307/data/master.infoSQL_Delay: 0SQL_Remaining_Delay: NULL

③ 比较从库上的Master_Log_File和Relay_Master_Log_File文件之间是否有差异
a、如果有差异,则说明主从延迟很严重;
b、如果没有差异,则比较Read_Master_Log_Pos和Exec_Master_Log_Pos的差异,这俩参数分别表示从库当前读取到的主库的二进制日志文件位置点和已经执行到的位置点;
c、如果上述输出都没有差异,可以通过主库上"show master status"和从库上"show slave status"的结果作比较。主要比较主库的"File"和从库的"Master_Log_File",主库上的"Position"和从库上的"Read_Master_Log_Pos";

3、主从延迟解决办法
(1)判断是否由于网络导致
方法:测试主从库之间的网络延迟,比如测试ping延迟。同时可以检查主从同步的时候是否使用了主库的域名来同步,而域名解析速度可能会特别慢。或者使用其他测试工具;
(2)判断是否由于硬件环境导致
方法:确认主从库的硬件配置是否相差较大,如果配置参数相差较大,可以排查从库上的CPU,内存,IO使用率来判断是否因为硬件配置导致;
(3)判断是否在主库上有大量的DML操作
方法:可以再主库上通过"show full processlist"命令查看当前正在执行的sql,查看是否有大量正在执行的SQL,或者观察主库的CPU和内存使用率,判断是否有高并发操作;
(4)判断是否有慢SQl,可以再主库上临时打开慢SQL记录,临时打开方法如下

#开启慢SQL功能并查看是否生效
mysql-server-3306> SET @@GLOBAL.slow_query_log = ON;
mysql-server-3306> SHOW VARIABLES LIKE 'slow_query_log';
#设置慢SQL的时间并查看是否生效,单位为s,表示大于多少秒的SQL会被记录
mysql-server-3306> SET @@GLOBAL.long_query_time = 5;
mysql-server-3306> SHOW VARIABLES LIKE 'long_query_time';
#设置慢SQL记录日志路径并查看是否生效。注意,这个目录必须对MySQL用户有读写权限
mysql-server-3306> SET @@GLOBAL.slow_query_log_file = '/mysql_data/mysql-slow.log';
mysql-server-3306> SHOW VARIABLES LIKE 'slow_query_log_file';

(5)检查从服务器参数配置是否合理
① 查看从库是否开启了binlog日志,从库上执行如下命令查看

mysql-server-3307> SHOW VARIABLES LIKE 'log_bin';

如果开启了binlog日志,而且从库未充当其他库的主库时,可以将从库上的binlog关闭,否则会增加从库负担,每次重放完成主库的binlog还要记录到自身的binlog

② 查看从库上的sync_binlog参数的值,这个参数表示的是事务提交多少次之后,由MySQL来将binlog_cache中的数据刷新到磁盘,有以下几种值:
0:表示事务提交之后,MySQL不做刷新binlog_cache到磁盘的操作,而是由操作系统来定时自动完成刷盘操作,这种操作对性能损耗最少,但是也最不安全;
n:表示提交n次事务之后,由MySQL将binlog_cache中的数据刷新到磁盘,如果开启,会对性能有一定程度的损耗。所以,从库上如果延迟很严重,可以考虑将该参数的值设为0;

mysql-server-3307> SET @@GLOBAL.sync_binlog = 0;
mysql-server-3307> SHOW VARIABLES LIKE 'sync_binlog';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sync_binlog   | 0     |
+---------------+-------+
1 row in set (0.00 sec)

③ 如果从库中要同步的数据库使用的是InnoDB存储引擎,可以查看innodb_flush_log_at_trx_commit参数。这个参数表示事务执行完成之后,多久的频率刷新一次日志到磁盘上,可用的值有如下几种:
0:表示MySQL会将日志缓冲区中的数据每秒一次地写入日志文件中,并且日志文件的刷盘操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作,效率最搞,但是安全性也比较低,可能会丢失数据;
1:每一次事务提交都需要把日志写入磁盘,这个过程是特别耗时的操作;
2:每一次事务提交之后,不会自动触发日志刷盘的操作,而是由操作系统来决定什么时候来做刷新日志的操作,在操作系统挂了的情况下才会丢失数据;
如果在主从延迟非常严重的情况下,可以将从库的该参数设置为0,以提高从库上重放主库二进制日志的效率。

mysql-server-3307> SET @@GLOBAL.innodb_flush_log_at_trx_commit = 0;
mysql-server-3307> SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 0     |
+--------------------------------+-------+
1 row in set (0.00 sec)

注意:上述设计到修改MySQL数据库实例的操作中,修改之后会立刻生效,但是重启实例之后,会失效,如果要永久修改,则需要编辑mysql配置文件,然后重启。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282195.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《树莓派渗透测试实战》——2.12 用例子总结以上步骤

本节书摘来异步社区《树莓派渗透测试实战》一书中的第2章,第2.12节,作者【美】Joseph Muniz(约瑟夫 穆尼斯) , Aamir Lakhani(阿米尔 拉克哈尼),更多章节内容可以访问云栖社区“异步社区”公众号…

申请成为qq互联个人开发者步骤(注意事项)2018

一、官方网址 官方地址:https://connect.qq.com/manage.html#/ 二、申请时注意事项: 1、申请时的名称栏必须填写身份证上的姓名,否则是不给通过的 2、上传照片时,需要本人手持身份证,重点是照片中身份证上头像的位置要…

《Swift开发实战》——第1章,第1.4节启动iOS 8模拟器

本节书摘来自异步社区《Swift开发实战》一书中的第1章,第1.4节启动iOS 8模拟器,作者 李宁,更多章节内容可以访问云栖社区“异步社区”公众号查看 1.4 启动iOS 8模拟器Xcode是一款功能全面的应用程序,通过此工具可以轻松输入、编译…

基于.NetCore开发博客项目 StarBlog - (18) 实现本地Typora文章打包上传

1前言九月太忙,只更新了三篇文章,本来这个功能是从九月初就开始做的,结果一直拖到现在国庆假期才有时间完善并且写文章~之前我更新了几篇关于 Python 的文章,有朋友留言问是不是不更新 .Net 了,那肯定不能啊&#xff0…

《算法导论》读书笔记--第1、2章课后题 (转)

第一章 转自http://www.cnblogs.com/batteryhp/p/4654860.html 思考题 1-1(运行时间的比较)确定时间t内求解的问题的最大规模。 上面是网上提供的答案。 注意点: 1、最左边一列的是关于n的增长情况描述,值得记住的是这些增长的排…

PHP开发自己的框架必备知识点

一、PHP常用的四种数据结构 简介&#xff1a;spl是php的一个标准库。 官方文档&#xff1a;http://php.net/manual/zh/book.spl.php <?php//spl&#xff08;php标准库&#xff09;数据结构/*** 栈&#xff08;先进后出&#xff09;*/ $stack new SplStack(); $stack-&g…

Linux 环境下 jdk1.8 maven3.2.3 Git2.8.0 安装脚本

2019独角兽企业重金招聘Python工程师标准>>> # Author: peizhouyu # Date: 2018-09-07 14:24:11 # Last Modified by: peizhouyu # Last Modified time: 2018-09-07 16:02:58#!/bin/bash SOFT_PATH/opt/softif [ ! -d $SOFT_PATH ];then mkdir $SOFT_PATH else …

《嵌入式设备驱动开发精解》——导读

前言 嵌入式设备驱动开发精解本书的编写主要是针对从事嵌入式软件开发人员。本书的内容主要涵盖ARM CPU以及各种常用外部设备驱动开发的方方面面&#xff0c;包括各种硬件接口、硬件接口协议说明以及各种外设的使用及调试方法&#xff0c;特别是对于开发调试过程中可能遇到的各…

C# WPF通过WindowChrome自定义窗体

概述在WPF界面开发中&#xff0c;系统默认的窗口比较丑&#xff0c;有时候想自定义窗体&#xff0c;比如微信的客户端窗口这样&#xff1a;使得左边的一块顶到最上端&#xff0c;如下图所示&#xff1a;这时候我们可以 WindowStyle"None"&#xff0c;AllowsTranspare…

【转载】递推公式的特征方程及通项公式

先贴上链接&#xff1a;http://blog.csdn.net/happykocola/article/details/73933314 因为最近在复习初赛&#xff0c;然后碰到了这道题&#xff0c;并不会做&#xff0c;才发现有这么高明的方法... 已知递推关系式&#xff1a; f(n)5f(n-1)-6f(n-2) (n>1) f(0)1 f(1)…

【leetcode】75. Sort Colors

题目如下&#xff1a; 解题思路&#xff1a;我的解题思路是遍历数组&#xff0c;遇到0删除该元素并插入到数组头部&#xff0c;遇到1则不处理&#xff0c;遇到2删除该元素并插入到数组尾部。 代码如下&#xff1a; class Solution(object):def sortColors(self, nums):"&q…

每日一言学做人,古之学问,博大精深

前言&#xff1a; 要成为一个有格局&#xff0c;有修养的人&#xff0c;吸纳一些有道理的思想和做法&#xff0c;去逐渐提高自己是非常有必要的&#xff0c;有一言&#xff0c;做事先做人&#xff0c;意即于此。因此&#xff0c;每日将自己看到的一段有感的话记录下来&#xf…

Seal-Report: 开放式数据库报表工具

Seal Report是.Net的一个基于Apache 2.0 开源工具&#xff0c;完全用C# 语言编写&#xff0c;最新的6.6 版本采用.NET 6&#xff0c;github: https://github.com/ariacom/Seal-Report。Seal Report提供了一个完整的框架&#xff0c;用于从任何数据库或任何非SQL源生成每日报告。…

《Ceph源码分析》——第2章,第2节Buffer

本节书摘来自华章出版社《Ceph源码分析》一书中的第2章&#xff0c;第2.2节Buffer&#xff0c;作者常涛&#xff0c;更多章节内容可以访问云栖社区“华章计算机”公众号查看 2.2 BufferBuffer就是一个命名空间&#xff0c;在这个命名空间下定义了Buffer相关的数据结构, 这些数…

eclipse在server中tomcat server找不到的问题

想要在eclipse的server新建tomcat服务器然而不知道怎么回事找不到Tomcat 7.0 Server 下面的红圈是tomcat server服务器&#xff08;更新后才出现&#xff09; 网上找的很久&#xff0c;只是找到在eclipse中安装tomcat插件的方法 Tomcat免安装版的环境变量配置以及Eclipse下的To…

Sysbench 1.0.15安装及使用

Sysbench是一款开源的多线程性能测试工具&#xff0c;可以执行CPU/内存/线程/IO/数据库等方面的性能测试&#xff0c;数据库目前支持MySQL/Oracle/PostgreSQL。 一、安装&#xff1a; Github地址&#xff1a;https://github.com/akopytov/sysbench RHEL/CentOS&#xff1a; cur…

PHP根据指定url生成二维码图片

一、composer安装 http://packagist.p2hp.com/packages/codeitnowin/barcode 二、使用 调用generateQrCode()方法即可实现生成二维码图片并输出下载给用户 <?php namespace manage\Test;use CodeItNow\BarcodeBundle\Utils\QrCode; use common\extensions\Helper; use y…

CA 周记 - 派福利!通过 Azure 零成本进入 CUDA 编程

我们在配置深度学习环境的时候&#xff0c;除了安装各种库和框架外&#xff0c;如果需要 GPU 加速&#xff0c;还需要配置 CUDA 。那 CUDA 是什么 &#xff1f;它的作用是什么 &#xff1f;CUDA 编程介绍01什么是 CUDA&#xff1f;CUDA (Compute Unified Device Architecture) …

《视图更新与关系数据库理论》——2.1 关系和关系变量

本节书摘来自异步社区出版社《视图更新与关系数据库理论》一书中的第2章&#xff0c;第2.1节&#xff0c;作者&#xff1a;【美】C.J. Date&#xff08;达特&#xff09;&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.1 关系和关系变量 每一个关系都有一…

盗取手机敏感信息,Android 6.0之上兼容

盗取手机敏感信息&#xff0c;Android 6.0之上兼容 项目介绍 盗取信息包含&#xff1a; 手机中所有照片手机中所有视频手机中所有通讯录手机中所有短信手机中所有通话记录手机中所有安装应用兼容Android 6.0及之上版本动态权限申请工具开放效果展示 1.照片信息 MaterialBean{mL…