mysql多实例复制,Mysql实例使用Rotate Master实现MySQL 多主复制的实现方法

搜索热词

《MysqL实例使用Rotate Master实现MysqL 多主复制的实现方法》要点:

本文介绍了MysqL实例使用Rotate Master实现MysqL 多主复制的实现方法,希望对您有用。如果有疑问,可以联系我们。当然,5.6的GUID功能的出现也带来了multi-master的无限可能,不过这个已经是题外话了.

本文主要介绍一种非实时的适用于各版本MysqL的multi-master办法.

内容简介:

最初的思路来源于一位国外DBA的blog : http://thenoyes.com/littlenoise/?p=117

基本原理就是通过SP记录当前 master-log的name和pos记录到表中,然后读取下一个master记录,执行stop slave / change master / start slave.以此循环反复.

个人对他的办法进行了改进,增加了以下功能:

1. master可以根据业务流量设置权重值

2. 各个master-slave运行情况的监控

3. 各个master可以实时退出多主的架构

具体操作过程:

1. 创建保存各个master信息的表

代码如下:

use MysqL;

CREATE TABLE `rotate_master` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`master_host` varchar(255) DEFAULT NULL comment 'master地址',

`master_port` int(10) unsigned DEFAULT NULL comment 'master端口',

`master_log_file` varchar(255) DEFAULT NULL ‘上次停止时的master-log文件',

`master_log_pos` int(10) unsigned DEFAULT NULL comment '上次停止时的master-log-pos',

`IS_Slave_Running` varchar(10) DEFAULT NULL comment '上次停止时主从是否有异常',

`in_use` tinyint(1) DEFAULT '0' comment '是否是当前正在同步的数据行',

`weight` int(11) NOT NULL DEFAULT '1' comment '该master的权重,即重复执行多少个时间片',

`repeated_times` int(11) NOT NULL DEFAULT '0' comment '当前已经重复执行的时间片数',

`LastExecuteTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '上次执行的时间',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

新增加一个master :

代码如下:

insert into `rotate_master`

(`master_host`,`master_port`,`master_log_file`,`master_log_pos`,`in_use`,`weight`)

values

-- 1号master,权重=1,并设置为当前master

('192.168.0.1',3307,'MysqLbinlog.000542',4,1,1),

-- 2号master,权重=2

('192.168.0.2',3306,'MysqLbinlog.000702',64762429,2),

-- 3号master,权重=5

('192.168.0.3','MysqLbinlog.000646',22157422,5)

手工把master 调整到当前的配置项:

代码如下:

change master to master_host='192.168.0.1',master_port=3306,master_log_file='MysqLbinlog.000542',master_log_pos=4,master_user='repl',master_password='repl';

start slave;

创建rotate master SP:

注意:代码中用于连接master的用户名和暗码是 : repl / repl,请根据自己的情况修改.

代码如下:

DELIMITER $$

DROP PROCEDURE IF EXISTS `MysqL`.`rotate_master`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `rotate_master`()

BEGIN

DECLARE _info text;

DECLARE _master_file varchar(255);

DECLARE _master_pos int unsigned;

DECLARE _master_host varchar(255);

DECLARE _master_port int unsigned;

DECLARE _is_slave_running varchar(10);

DECLARE _id int;

DECLARE _weight int;

DECLARE _repeated_times int;

select VARIABLE_VALUE from information_schema.GLOBAL_STATUS where VARIABLE_NAME = 'Slave_running' into _is_slave_running;

STOP SLAVE;

SELECT LOAD_FILE(@@relay_log_info_file) INTO _info;

SELECT

SUBSTRING_INDEX(SUBSTRING_INDEX(_info,'\n',3),-1),

SUBSTRING_INDEX(SUBSTRING_INDEX(_info,4),-1)

INTO _master_file,_master_pos;

UPDATE MysqL.rotate_master SET `master_log_file` = _master_file,`master_log_pos` = _master_pos,id = LAST_INSERT_ID(id),`IS_Slave_Running` = _is_slave_running WHERE in_use = 1;

select weight,repeated_times into _weight,_repeated_times from MysqL.rotate_master where in_use =1;

if(_weight <= _repeated_times)

THEN

SELECT

id,

master_host,

master_port,

master_log_file,

master_log_pos

INTO _id,_master_host,_master_port,_master_file,_master_pos

FROM rotate_master

ORDER BY id <= LAST_INSERT_ID(),id LIMIT 1;

SET @sql := CONCAT(

'CHANGE MASTER TO master_host=',QUOTE(_master_host),

',master_port=',master_log_file=',QUOTE(_master_file),master_log_pos=',_master_pos

',master_user="repl"',master_password="repl"'

);

PREPARE myStmt FROM @sql;

EXECUTE myStmt;

UPDATE MysqL.rotate_master SET in_use = 0,repeated_times=0 WHERE in_use = 1;

UPDATE MysqL.rotate_master SET in_use = 1,repeated_times=1 WHERE id = _id;

ELSE

UPDATE MysqL.rotate_master SET `repeated_times`=`repeated_times`+1 WHERE in_use = 1;

END IF;

START SLAVE;

END$$

DELIMITER ;

创立Event:

每2分钟运行一次,rotate_master(),即时间片大小是2分钟

代码如下:

DELIMITER $$

CREATE EVENT `rotate_master` ON SCHEDULE EVERY 120 SECOND STARTS '2011-10-13 14:09:40' ON COMPLETION NOT PRESERVE ENABLE DO CALL MysqL.rotate_master()$$

DELIMITER ;

至此,多主复制已经搭建完成.

由于时间片长度是2分钟.

Master1 在执行 1*2 分钟后,stop slave,然后change master to Master2;

Master2 在执行 2*2 分钟后,然后change master to Master3;

Master3 在执行 5*2 分钟后,然后change master to Master2;

并以此循环往复.

如果希望把此中一个master移除多主复制,可以将他的配置项权重设置为0;

即: update rotate_master set weigh=0 where id = #ID# ;

编程之家PHP培训学院每天发布《MysqL实例使用Rotate Master实现MysqL 多主复制的实现方法》等实战技能,PHP、MysqL、LINUX、APP、JS,CSS全面培养人才。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

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

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

相关文章

Dapper操作MySQL数据库获取JSON数据中文乱码

在项目中利用Dapper将JSON数据存储到MySQL数据库&#xff0c;结果发现JSON数据中的中文乱码&#xff0c;特此记录&#xff0c;希望对存储JSON的童鞋能有所帮助&#xff0c;文中若有错误之处&#xff0c;还望批评指正。为了引出最终问题出在什么地方&#xff0c;我们重头开始进行…

C++set容器去重法

给出一个10位数&#xff0c;它如果每个位的数都把0-9这10个数都只用了一次&#xff0c;就输出yes&#xff0c;否则输出no #include <iostream> #include <set> using namespace std; set<int>s; typedef long long LL;int main() {LL n;while (cin >>…

django mysql connector,MySQL Connector / python在Django中不起作用

我正在学习以MySQL为后端的Django。 我安装了Oracle的mysql连接器以与mysql连接。 但是&#xff0c;当我运行python manage.py时&#xff0c;出现此错误Traceback (most recent call last):File"C:\Python33\lib\site-packages\django\db\backends\mysql\base.py", l…

流传在程序员中的传说,你知道几个?

在号称从事高薪新 科技工作的程序员周遭流传着许多与他们单纯气质不符的传说在这些被神秘面纱笼罩的人群中即使是从事着同一工种都有着许许多多科学无法解释的差异老程序员们对此讳莫如深新程序员们却有时感到惶恐不安...这背后究竟是道德的扭曲还是人性的沦丧倒是都并不至于只…

C++关于getline()和getchar()的小点

getchar只能“吃”一个字符&#xff0c;而getline可以“吃”一行字符 代码如下: #include <iostream> #include <cstring> using namespace std;int main() {char c;cin>>c;string line;getline(cin,line);cout<<c<<endl;cout<<line<…

php 如何生成二级目录json,使用PHP根据已解码的JSON创建文件夹/文件结构

例如,我下面有一个build.json文件.包含我在JSON中创建的基本文件夹/文件结构.{"folders": [{"name": "folder-a","files": [{"name": "file-a.html"},{"name": "file-b.html"}],"folder…

谁说docker-compose不能水平扩展容器、服务多实例?

❝虽说我已经从docker-compose走上了docker swarm的邪门歪道&#xff0c;目前被迫走在k8s这条康庄大道&#xff0c; 但是我还是喜欢docker-compose简洁有效的部署方式。❞曾其何时docker-compose非常适合开发、测试、快速验证原型&#xff0c;这个小工具让单机部署容器变得简洁…

C++substr()用法

substr()用法: string 需要截取的字符串 a 截取字符串的开始位置&#xff08;注&#xff1a;当a等于0或1时&#xff0c;都是从第一位开始截取&#xff09; b 要截取的字符串的长度 注意:第3个参数是要截取字符串的长度

.NET Core开发实战(第33课:集成事件:使用RabbitMQ来实现EventBus)--学习笔记(上)...

33 | 集成事件&#xff1a;使用RabbitMQ来实现EventBus这一节我们来讲解如何通过 CAP 组件和 RabbitMQ 来实现 EventBus要实现 EventBus&#xff0c;我们这里借助了 RabbitMQ&#xff0c;它的整个安装和使用的体验是非常人性化的&#xff0c;如果是在 Windows 下开发的话&#…

nginx php iconv,Nginx +PHP部署一

Nginx PHP部署一Alvin.zeng目录一、安装PHP1、Yum安装需要的包yum -y install gcc gcc-c autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurs…

递归算法训练

[蓝桥杯]字母组串-递归[蓝桥杯][基础练习VIP]FJ的字符串-递归

以Blog.Core的方式来打开Abp.vNext

&#xff08;发现Abp这个logo真像佐助写轮眼&#xff09;最近自己的框架已经基本的成型了&#xff0c;当然还有很多质疑的地方&#xff0c;比如这些人是这么说的&#xff0c;基本都是原文&#xff1a;你的教程太乱了&#xff0c;和框架代码都不一样&#xff08;&#xff1f;&am…

算法题目中常见的几种输入小点-gets,cin,scanf,getline,sstream

cin,scanf遇到空格都会停下来。gets可读入空格 例如: 在这里由于要读入空格&#xff0c;我们用gets来读入。 const int N 8; char g[N][N];while(gets(g[0])!NULL) {gets(g[1]);}C关于getline()和getchar()的小点C stringstream输入方式下面这两段代码要注意一下: const in…

php+换行+php+eol,PHP PHP_EOL 换行符

换行符unix系列用 \nwindows系列用 \r\nmac用 \rPHP中可以用PHP_EOL来替代&#xff0c;以提高代码的源代码级可移植性如&#xff1a;echoPHP_EOL;//windows平台相当于 echo "\r\n";//unix\linux平台相当于 echo "\n";//mac平台相当于 echo "…

如何做好一个开源项目(一)

做好一个开源项目其实是一件比较费时费力费心的工作&#xff0c;它的最大难点除了代码维护之外&#xff0c;还包括后期的维护和持续的跟进。我曾经做过不少开源项目&#xff0c;但是坚持下来的&#xff0c;目前有信心能够持续维护的也只有Magicodes.IE。这里请允许我来一波硬广…

量子力学问题matlab求解,一个关于量子力学中的matlab的问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼syms E U x U1 a a1 a2 k k1 k2 k3 b c d e f g h l S%其中&#xff0c;b c d e f g h l是为计算简明而引入的字符&#xff0c;S为透射系数D与反射系数R之和。Einput(请输入入射电子能量E);Uinput(请输入势垒函数U);a1input(请输入…

洛谷 P1506 拯救oibh总部-dfs染色法

题目背景 oibh总部突然被水淹没了&#xff01;现在需要你的救援…… 题目描述 oibh被突来的洪水淹没了>.<还好oibh总部有在某些重要的地方起一些围墙&#xff0c;用号表示&#xff0c;而一个封闭的号区域洪水是进不去的……现在给出oibh的围墙建设图&#xff0c;问oibh…

Abp商业版 - Identity Server模块

该模块提供了Identity Server的集成和管理功能.建立在IdentityServer4类库之上.管理系统中的客户端,身份资源和API资源(Clients, Identity resources, API resources)设置客户端(Clients)权限.轻松创建标准的身份资源(例如role, profile)创建自定义身份资源(identity resources…

python3 beautifulsoup 表格,使用Python中的BeautifulSoup拉取特定的表数据

匿名用户下面的脚本提取数据并将数据保存到csv文件中。import requestsfrom bs4 import BeautifulSoupimport pandas as pdres requests.get(https://gol.gg/teams/list/season-ALL/split-ALL/region-ALL/tournament-LCS%20Summer%202020/week-ALL/)soup BeautifulSoup(res.t…

洛谷 P1162 填涂颜色-dfs染色法

输入: 6 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1输出: 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 2 2 1 1 1 2 2 2 1 1 2 2 2 2 1 1 1 1 1 1 1代码如下: #include <iostream> using namespace std; const int N 40; int mp[N][N], mps[N][N…