限制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.mzph.cn/news/458573.shtml

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

相关文章

掌握 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…

登录失败时记住访问的地址

登录失败时记住访问的地址 使用spring MVC 访问时,在拦截器中记录访问的地址: Java代码 String path request.getRequestURI();//"/demo_channel_terminal/news/list" System.out.println("您无权访问:" path); //用于登录成功…

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…

基于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("星期日", "星期一", "星期二","星期三","星期四", "星期五","星期六"…

iOS 推送

最近在研究ios的推送问题&#xff0c;遇到了一些问题&#xff0c;最终整理了一下。放在这里和大家分享APNS的推送机制首先我们看一下苹果官方给出的对ios推送机制的解释。如下图 Provider就是我们自己程序的后台服务器&#xff0c;APNS是Apple Push Notification Service的缩写…

iOS 加载本地html文件详细操作

webView的加载&#xff0c;如果是纯文本&#xff0c;有内部样式的话&#xff0c;简单的加载请求就可以了。如下: 这种加载简单直接&#xff0c;易操作。 如果需要加载images&#xff0c;css文件 需要把xcode的项目请求路径的位置告诉webView.代码如下&#xff1a; 这样html文件…

[原]详解如何将cocos2dx项目编译到Android平台上的(方式一:Cywin+NDK)

链接地址&#xff1a;http://m.blog.csdn.net/blog/yhc13429826359/29357815 2014-6-8阅读578 评论0 前言&#xff1a;cocos2dx作为一个开源的移动2D游戏框架&#xff0c;其跨平台的特性让它备受开发公司的欢迎。这里我就不做概念性的解释了&#xff0c;通过这篇文章你就会了解…

JSP EL表达式使用

为什么80%的码农都做不了架构师&#xff1f;>>> ##1.EL全名为Expression Language out.print(str) <%str%> ${str}例子&#xff1a; Hi! <%username%> 和 Hi! ${username}是一样的 只要是支持servlet2.4/jsp2.0的Container就都可以在jsp网页中直接使用e…

eclipse 中 Android sdk 无法更新的问题

诶&#xff0c;真是麻烦&#xff0c;想下个东西都下不了。我也好久没折腾过这个了&#xff0c;在家的电脑是早就下载好了的&#xff0c;然后如今又须要下载一份。下不到。网上搜到了资料&#xff0c;记录下来&#xff1a; 第一种方法:sdk manager - tools - option 选择强制 xx…

iOS10 xcode8 分页请求MJRefresh崩溃问题

MJRefresh出现崩溃现象 解决办法&#xff1a;类库增加判断 if (range.location ! NSNotFound) { language [language substringToIndex:range.location]; }

网络编程学习笔记一:Socket编程

from: http://blog.csdn.net/gneveek/article/details/8699198 “一切皆Socket&#xff01;” 话虽些许夸张&#xff0c;但是事实也是&#xff0c;现在的网络编程几乎都是用的socket。 ——有感于实际编程和开源项目研究。 我们深谙信息交流的价值&#xff0c;那网络中进程之间…

[delphi]修改indy源码后重新编译

http://blog.csdn.net/nerdy/article/details/8702568 虽然indy有一身的毛病&#xff0c;但是一般情况下使用起来还是多方便的。 今天在做一个使用到indy的程序的时候&#xff0c;发现无论你怎么修改idhttp.request.accept-encoding&#xff0c;他都会在其后添加一个值 identit…

xcode8 崩溃问题

【1】、Xcode8代码出现ubsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0 2016-09-14 17:18:…