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.pswp.cn/news/282195.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282195.shtml
英文地址,請注明出處:http://en.pswp.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…