限制MySQL Binlog的傳輸速率

最近一臺核心庫備庫完成恢復后打開slave,導致主庫傳送binlog,瞬間占滿網絡,觸發故障。

為了做一些限制, 給mysql在發送binlog的函數(mysql_binlog_send)里每隔一段時間sleep一次, 增加了兩個參數:

master_send_count? 每讀master_send_count次事件,sleep一次

master_send_sleep?? 每次sleep的時間為master_send_sleep ,單位為毫秒ms

以下統計數據,每1秒統計一次。

1.不受限制

set global master_send_count = 0;

set global master_send_sleep = 0;

K1%2525257DUF2%252525G%25255DF98FB1FB4~HNO5

2.?

set global master_send_count = 10;

set global master_send_sleep = 100;

clipboard

3.

set global master_send_count = 10;

set global master_send_sleep = 200;

HP%24DNAO02K%25%257BQ1%257D%257DF)JM%5B_C

4.

set global master_send_count = 1;

set global master_send_sleep = 15;

X@)A2YK811GRTCKJ5_@3W~S

5.

set global master_send_count = 1;

set global master_send_sleep = 50;

clipboard[1]

測試的過程中,發現時不時的網卡發送數據彪的很高,暫不清楚原因,似乎mysql本身會做緩存。

Patch 很簡單,基于5.1.48

Index: sql/sql_repl.cc
===================================================================
--- sql/sql_repl.cc	(revision 2487)
+++ sql/sql_repl.cc	(working copy)
@@ -360,6 +360,8 @@DBUG_ENTER("mysql_binlog_send");DBUG_PRINT("enter",("log_ident: '%s'  pos: %ld", log_ident, (long) pos));+  ulong read_count=0;
+  bzero((char*) &log,sizeof(log));#ifndef DBUG_OFF
@@ -541,11 +543,18 @@/* seek to the requested position, to start the requested dump */my_b_seek(&log, pos);			// Seek will done on next read
-
+  while (!net->error && net->vio != 0 && !thd->killed){while (!(error = Log_event::read_log_event(&log, packet, log_lock))){
+      if (master_send_count != 0 &&
+             master_send_sleep !=0 &&
+             ++read_count>master_send_count) {
+          my_sleep(master_send_sleep);
+          read_count=0;
+      }
+#ifndef DBUG_OFFif (max_binlog_dump_events && !left_events--){
Index: sql/mysqld.cc
===================================================================
--- sql/mysqld.cc	(revision 2487)
+++ sql/mysqld.cc	(working copy)
@@ -540,6 +540,9 @@ulong binlog_cache_use= 0, binlog_cache_disk_use= 0;ulong max_connections, max_connect_errors;uint  max_user_connections= 0;
+ulong master_send_count = 0;
+ulong master_send_sleep = 0;
+/**Limit of the total number of prepared statements in the server.Is necessary to protect the server against out-of-memory attacks.
@@ -5737,7 +5740,9 @@OPT_SLOW_QUERY_LOG_FILE,OPT_IGNORE_BUILTIN_INNODB,OPT_BINLOG_DIRECT_NON_TRANS_UPDATE,
-  OPT_DEFAULT_CHARACTER_SET_OLD
+  OPT_DEFAULT_CHARACTER_SET_OLD,
+  OPT_MASTER_SEND_COUNT,
+  OPT_MASTER_SEND_SLEEP};@@ -7128,6 +7133,14 @@"t_innodb; otherwise, slaves may diverge from the master.",(uchar**) &global_system_variables.binlog_direct_non_trans_update, (uchar**) &max_system_variables.binlog_direct_non_trans_update, 0, GET_BOOL, NO_ARG, 0,0, 0, 0, 0, 0},
+  {"master_send_count", OPT_MASTER_SEND_COUNT,
+   "every master_send_count binlog send ,will sleep for a while",
+   (uchar**) &master_send_count, (uchar**) &master_send_count, 0, GET_ULONG,
+   REQUIRED_ARG, 0, 0, ULONG_MAX, 0, 1, 0},
+  {"master_send_sleep", OPT_MASTER_SEND_SLEEP,
+   "every master_send_count binlog send ,will sleep master_send_sleep ms",
+   (uchar**) &master_send_sleep, (uchar**) &master_send_sleep, 0, GET_ULONG,
+   REQUIRED_ARG, 0, 0, ULONG_MAX, 0, 1, 0},{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}};Index: sql/mysql_priv.h
===================================================================
--- sql/mysql_priv.h	(revision 2487)
+++ sql/mysql_priv.h	(working copy)
@@ -81,6 +81,9 @@/* increment query_id and return it.  */inline query_id_t next_query_id() { return global_query_id++; }+extern ulong master_send_count;
+extern ulong master_send_sleep;
+/* useful constants */extern MYSQL_PLUGIN_IMPORT const key_map key_map_empty;extern MYSQL_PLUGIN_IMPORT key_map key_map_full;          /* Should be threaded as const */
Index: sql/set_var.cc
===================================================================
--- sql/set_var.cc	(revision 2487)
+++ sql/set_var.cc	(working copy)
@@ -436,6 +436,8 @@&SV::myisam_stats_method,&myisam_stats_method_typelib,NULL);
+static sys_var_long_ptr Sys_master_send_count(&vars, "master_send_count", &master_send_count);
+static sys_var_long_ptr Sys_master_send_sleep(&vars, "master_send_sleep", &master_send_sleep);#ifdef __NT__/* purecov: begin inspected */

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458573.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458573.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458573.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

sprintf用法詳解

printf可能是許多程序員在開始學習C語言時接觸到的第二個函數(我猜第一個是main),說起來,自然是老朋友了,可是,你對這個老朋友了解多嗎?你對它的那個孿生兄弟sprintf了解多嗎?在將各…

掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 發出異步請求

轉http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro2/ 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 發出異步請求 在 Web 請求中使用 XMLHttpRequest 多數 Web 應用程序都使用請求/響應模型從服務器上獲得完整的 HTML 頁面。常常是點擊一個按鈕&#xff0…

Provisioning Services 7.8 入門系列教程之十一 通過版本控制自動更新虛擬磁盤

續Provisioning Services 7.8 入門系列教程之十 通過類自動更新虛擬磁盤從前兩的兩種更新方式可以看出,它們有一個共同的特點,即需要產生(復制)完成的虛擬磁盤副本,然后進行相關的升級操作。這兩種方法在實際生產中&am…

OC面試題

什么是KVC和KVO? 答:KVC(Key-Value-Coding)內部的實現:一個對象在調用setValue的時候, (1)首先根據方法名找到運行方法的時候所需要的環境參數。 (2)他會從自己isa指針結合環境參數&…

【算法】QuickSort

快速排序,時間復雜度O(N*logN),要能熟練掌握! 以下主要參考http://blog.csdn.net/morewindows/article/details/6684558, 感謝原博主! 該方法的基本思想是: 1.先從數列中取出一個數作為基準數。…

串口之GetCommState、SetCommState函數詳解

GetCommState 讀取串口設置(波特率,校驗,停止位,數據位等).函數聲明:BOOL GetCommState(HANDLE hFile,LPDCB lpDCB);GetCommState函數的第一個參數hFile是由CreateFile函數返回指向已打開串行口的句柄。第二個參數指向設備控制塊DCB。如果函數調用成功,則…

登錄失敗時記住訪問的地址

登錄失敗時記住訪問的地址 使用spring MVC 訪問時,在攔截器中記錄訪問的地址: Java代碼 String path request.getRequestURI();//"/demo_channel_terminal/news/list" System.out.println("您無權訪問:" path); //用于登錄成功…

串口之GetCommTimeouts、SetCommTimeouts函數詳解

Windows系統利用此函數獲取特定的通訊設備讀寫時的超時參數設定,GetCommTimeouts函數聲明如下:BOOL GetCommTimeouts(HANDLE hFile,LPCOMMTIMEOUTS lpCommTimeouts);GetCommTimeouts函數的第一個參數hFile是由CreateFile函數返回指向已打開串行口的句柄。…

GUN/LINUX命令之 cp mv install

1. cp命令 復制copy命令的簡寫 SYNOPSIS cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY SOURCE... cp SOURCE DEST 后者如果是目錄那么源文件就復制到文件夾里面并且保持著原來的名字;如果D…

Tomcat - Maven plugin: 運行找不到webapp

2019獨角獸企業重金招聘Python工程師標準>>> The tomcat7-maven-plugin allows running the current project as a Web application and additional <webapps> can be specified that will be simultaneously loaded into tomcat. My project is not a Web ap…

面試題3

1. 你如何理解 iOS 內存管理 1. new alloc copy retain這些對象我們都要主動的release或者 autorelease 2. 如果是類方法創建的對象,那么系統自動釋放池自動在適當的 時候會幫我們 release 3. ARC xcode 自動會幫我們人工智能的添加 release autorelease 操 作 2. C語言里的數…

基于MQTT協議進行應用開發

來自&#xff1a;http://www.cnblogs.com/secondtononewe/p/6073089.html 官方協議有句如下的話來形容MQTT的設計思想&#xff1a; “It is designed for connections with remote locations where a "small code footprint" is required or the network bandwidth i…

SortedDictionaryTKey,TValue正序與反序排序及Dicttionary相關

SortedDictionary<TKey,TValue>能對字典排序 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace SortDictionary {class Program{static void Main(string[] args){TestDictionarySort();…

DOS窗口的編碼頁從UTF-8調回GBK

2019獨角獸企業重金招聘Python工程師標準>>> 之前在DOS窗口操作MySQL數據庫的時候&#xff0c;將編碼頁從GBK設置成了UTF-8&#xff0c;解決了在DOS窗口顯示MySQL數據庫中的表中的中文字符出現亂碼的問題。但是除此之外&#xff0c;DOS窗口顯示的其他中文字符都是亂…

UIBezierPath

學習UIBezierPath畫圖 筆者在寫本篇文章之前&#xff0c;也沒有系統學習過貝塞爾曲線&#xff0c;只是曾經某一次的需求需要使用到&#xff0c;才臨時百度看了一看而且使用最基本的功能。現在總算有時間停下來好好研究研究這個神奇而偉大的貝塞爾先生&#xff01; 筆者在學習時…

系統架構設計理論與原則

一、無共享架構 1、無共享架構 無共享架構是一種分布式計算架構&#xff0c;這種架構中不存在集中存儲的狀態&#xff0c;系統中每個節點都是獨立自治的&#xff0c;整個系統中沒有資源競爭&#xff0c;這種架構具有非常強的擴張性&#xff0c;目前在web應用中被廣泛使用。 無共…

VS2010 教程:創建一個 WPF 應用程序 (第一節)

來自&#xff1a;https://msdn.microsoft.com/zh-cn/library/ff629048.aspx [原文發表地址] VS2010 Tutorial: Build a WPF App (Step 1) [原文發表時間] Friday, May 22, 2009 8:00 AM 這篇文章里&#xff0c;我將使用VS2010 Beta 1創建一個WPF 應用程序。并且 我將展示這個產…

js 日期星期 帶農歷

Weekday代碼 //得到當前日期如2009年6月19日 星期五 function getDate(){ var today new Date(); var x new Array("星期日", "星期一", "星期二","星期三","星期四", "星期五","星期六"…

FMDB的使用

// // FMDBmanager.h // database // // Created by PRL on 16/10/13. // Copyright © 2016年PRL. All rights reserved. // #import <Foundation/Foundation.h> interface FMDBmanager : NSObject{ FMDatabase * _db; } (FMDBmanager *)sharedManager; //獲取…

深入淺出WPF之Binding的使用(一)

from: http://www.cnblogs.com/akwwl/p/3421005.html 在WPF中Binding可以比作數據的橋梁&#xff0c;橋梁的兩端分別是Binding的源&#xff08;Source&#xff09;和目標&#xff08;Target&#xff09;。 一般情況下&#xff0c;Binding源是邏輯層對象&#xff0c;Binding目…