MySQL两主多从,且故障转移配置
一、角色划分
1、MySQL数据库规划
主机名 IP地址 角色 mysql_server_id
weiliaodb1 192.168.1.233 master1 1
weiliaodb2 192.168.1.234 master2 2
weiliaodb3 192.168.1.235 slave1 3
monitor 192.168.1.240 mmm_mon -
2、虚拟IP规划
IP地址 角色
192.168.1.10 writer
192.168.1.20 reader
192.168.1.30 reader
192.168.1.40 reader
二、MySQL数据同步设定
1、数据导入导出
在 192.168.1.233:
# /usr/local/mysql/bin/mysqldump -uroot -pxinhuo123 --database openfire > /data/openfire.sql
在 192.168.1.234、192.168.1.235:
# mysql -uroot -pxinhuo123 -e "create database openfire default charset utf8 COLLATE utf8_general_ci;"
# mysql -uroot -pxinhuo123 openfire < /data/openfire.sql
2、数据同步帐号添加
在 192.168.1.233:
mysql> grant replication slave on *.* to 'slave'@'192.168.1.234' identified by '123456';
mysql> grant replication slave on *.* to 'slave'@'192.168.1.235' identified by '123456';
mysql> flush privileges;
在 192.168.1.234:
mysql> grant replication slave on *.* to 'slave'@'192.168.1.233' identified by '123456';
mysql> grant replication slave on *.* to 'slave'@'192.168.1.235' identified by '123456';
mysql> flush privileges;
3、数据库配置文件修改
在 192.168.1.233 的 /etc/my.cnf 添加:
log-bin=mysql-bin
server-id = 1
binlog-do-db=openfire
binlog-ignore-db=mysql,information_schema
replicate-do-db=openfire
replicate-ignore-db=mysql,information_schema
log-slave-updates
slave-skip-errors=all
sync_binlog=1
#replicate-same-server-id #主要用于同时写的情况
#auto_increment_increment=2
#auto_increment_offset=1
read_only = 0
在 192.168.1.234 的 /etc/my.cnf 添加:
log-bin=mysql-bin
server-id = 2
binlog-do-db=openfire
binlog-ignore-db=mysql,information_schema
replicate-do-db=openfire
replicate-ignore-db=mysql,information_schema
log-slave-updates
slave-skip-errors=all
sync_binlog=1
#replicate-same-server-id #主要用于同时写的情况
#auto_increment_increment=2
#auto_increment_offset=2
read_only = 0
在 192.168.1.235 的 /etc/my.cnf 添加:
log-bin=mysql-bin
server-id = 3
log-slave-updates
binlog-do-db=openfire
binlog-ignore-db=mysql,information_schema
replicate-do-db=openfire
replicate-ignore-db=mysql,information_schema
read_only = 1
在 192.168.1.240 的 /etc/my.cnf 添加:
log-bin=mysql-bin
server-id = 4
log-slave-updates
binlog-do-db=openfire
binlog-ignore-db=mysql,information_schema
replicate-do-db=openfire
replicate-ignore-db=mysql,information_schema
重启4台DB:
# service mysqld restart
4、同步设置
在 192.168.1.233、192.168.1.234:
mysql> flush tables with read lock;
mysql> show master status\G;
记录下各自的 master_log_file、master_log_pos值
在 192.168.1.233:
mysql> change master to
-> master_host='192.168.1.234',
-> master_user='slave',
-> master_password='123456',
-> master_log_file='binlog.000052',
-> master_log_pos=500;
在 192.168.1.234:
mysql> change master to
-> master_host='192.168.1.233',
-> master_user='slave',
-> master_password='123456',
-> master_log_file='binlog.000022',
-> master_log_pos=1354;
在 192.168.1.235:
mysql> change master to
-> master_host='192.168.1.234',
-> master_user='slave',
-> master_password='123456',
-> master_log_file='binlog.000052',
-> master_log_pos=500;
在 192.168.1.233、192.168.1.234、192.168.1.235:
mysql> start slave;
mysql> show slave status\G;
确保有如下值:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在 192.168.1.233,192.168.1.234:
unlock tables;
三、mysql-mmm 依赖的 perl 库安装
如果无法进入 cpan 方式安装,可以如下操作:
# yum -y install perl-ExtUtils-MakeMaker
# tar -zxvf CPAN-1.9205.tar.gz
# cd CPAN-1.9205
# perl Makefile.PL
# make && make install
1、在 weiliaodb1、weiliaodb2、weiliaodb3 安装 mysql-agent 所依赖的 perl 库
# perl -MCPAN -e shell
cpan> install Algorithm::Diff
cpan> install DBI
cpan> install Log::Dispatch
cpan> install Log::Log4perl
cpan> install Mail::Send
cpan> install Net::ARP
cpan> install Proc::Daemon
cpan> install Time::HiRes
cpan> install DBD::mysql
cpan> install File::stat
cpan> install File:basename
2、在 monitor 安装 mysql-monitor 所依赖的 perl 库
# perl -MCPAN -e shell
cpan> install Algorithm::Diff
cpan> install Class::Singleton
cpan> install Log::Dispatch
cpan> install Log::Log4perl
cpan> install Mail:Send
cpan> install Proc::Daemon
cpan> install Thread::Queue
cpan> install Time::HiRes
cpan> install DBI and DBD::mysql
cpan> install File::Basename
cpan> install File::stat
cpan> install File::Temp
cpan> Net::Ping
四、安装 mysql-mmm
1、在 weiliaodb1、weiliaodb2、weiliaodb3、monitor
# wget http://mysql-mmm.org/_media/:mmm2:mysql-mmm-2.2.1.tar.gz
# mv :mmm2:mysql-mmm-2.2.1.tar.gz mysql-mmm-2.2.1.tar.gz
# tar -zxvf mysql-mmm-2.2.1.tar.gz
# cd mysql-mmm-2.2.1
# make && make install
2、路径分布
/usr/lib/perl5/vendor_perl/5.8.8/MMM MMM 使用的 perl 模块
/usr/lib/mysql-mmm MMM 的脚本揑件
/usr/sbin MMM 的命令保存路径
/var/log/mysql-mmm MMM 的日志保存路径
/etc MMM 配置文件保存的路径
/etc/mysql-mmm MMM 配置文件保存的路径,优先级最高
/etc/init.d/ agentd 和 monitor 的启劢关闭脚本
3、配置 MYSQL-MMM-AGENTD
添加 agentd 使用的 mysql 用户 (weiliaodb1、weiliaodb2、weiliaodb3):
mysql> grant super,replication client,process on *.* to 'mmm_agent'@'192.168.1.233' identified by '123456';
mysql> grant super,replication client,process on *.* to 'mmm_agent'@'192.168.1.234' identified by '123456';
mysql> grant super,replication client,process on *.* to 'mmm_agent'@'192.168.1.235' identified by '123456';
mysql> grant super,replication client,process on *.* to 'mmm_agent'@'192.168.1.240' identified by '123456';
配置 mmm_common.conf (weiliaodb1、weiliaodb2、weiliaodb3、monitor):
# vi /etc/mysql-mmm/mmm_common.conf
active_master_role writer
<host default>
cluster_interface eth0
pid_path /var/run/mmm_agentd.pid
bin_path /usr/lib/mysql-mmm/
replication_user slave
replication_password 123456
agent_user mmm_agent
agent_password 123456
mysql_port 3306
</host>
<host weiliaodb1>
ip 192.168.1.233
mode master
peer weiliaodb2
</host>
<host weiliaodb2>
ip 192.168.1.234
mode master
peer weiliaodb1
</host>
<host weiliaodb3>
ip 192.168.1.235
mode slave
</host>
<role writer>
hosts weiliaodb1, weiliaodb2
ips 192.168.1.10
mode exclusive
</role>
<role reader>
hosts weiliaodb1, weiliaodb2, weiliaodb3
ips 192.168.1.20,192.168.1.30,192.168.1.40
mode balanced
</role>
配置 mmm_agent.conf (weiliaodb1、weiliaodb2、weiliaodb3):
在 weiliaodb1 上:
# vi /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this weiliaodb1
在 weiliaodb2 上:
# vi /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this weiliaodb2
在 weiliaodb3 上:
# vi /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this weiliaodb3
4、启动 MYSQL-MMM_AGENT (weiliaodb1、weiliaodb2、weiliaodb3)
# /etc/init.d/mysql-mmm-agent start
# /etc/init.d/mysql-mmm-agent status
# ps aux | grep mmm
# netstat -tulnp | grep mmm
注意:/var/log/mysql-mmm/mmm_agentd.log
5、配置 MYSQL-MMM-MONITOR
创建 mmm-monitor 使用的 mysql 用户 (weiliaodb1、weiliaodb2、weiliaodb3):
mysql> grant replication client on *.* to 'mmm_monitor'@'192.168.1.240' identified by '123456';
修改 monitor 上的配置
# vi /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf
<monitor>
ip 192.168.1.240
pid_path /var/run/mmm_mond.pid
bin_path /usr/lib/mysql-mmm/
status_path /var/lib/misc/mmm_mond.status
ping_ips 192.168.1.233, 192.168.1.234, 192.168.1.235
</monitor>
<host default>
monitor_user mmm_monitor
monitor_password 123456
</host>
debug 0
启动 MYSQL-MMM-MONITOR
# /etc/init.d/mysql-mmm-monitor start
# ps aux | grep mmm
6、管理 MYSQL-MMM-MONITOR
# mmm_control mode
# mmm_control show
weiliaodb1(192.168.1.233) master/AWAITING_RECOVERY. Roles:
weiliaodb2(192.168.1.234) master/AWAITING_RECOVERY. Roles:
weiliaodb3(192.168.1.235) slave/AWAITING_RECOVERY. Roles:
现在都处于 AWATING_RECOVERY 状态
# mmm_control set_online weiliaodb1
# mmm_control set_online weiliaodb2
# mmm_control set_online weiliaodb3
# mmm_control show
# mmm_control checks all
将 writer 角色以外的主机的 mysql 都设置成 read-only=1
mysql> show global variables like 'read_only';
mysql> set global read_only=on;
注意:如果某台DB宕机超过60秒,需要手动设置online
五、测试部分
1、写入数据是否同步 (略)
2、writer 故障切换 (略)
3、weiliaodb3 的主是否切换 (略)
4、测试角色优先配置的影响
修改 mmm-monitor 的配置,让 weiliaodb1 具有优先获取 writer 角色
# vi /etc/mysql-mmm/mmm_common.conf
<role writer>
hosts weiliaodb1, weiliaodb2
ips 192.168.1.10
mode exclusive
prefer weiliaodb1
</role>
# /etc/init.d/mysql-mmm-monitor restart
转载于:https://blog.51cto.com/sofar/764190
相关文章:

Go开发者路线图2019,请收下这份指南
整理 | Rachel责编 | 阿司匹林出品 | AI科技大本营(ID: rgznai100)Go是Google开发的一种静态、强类型、编译型、并发型,并具有垃圾回收功能的类C编程语言。2009以开源项目的形式发布,2012年发布1.0稳定版本,距今已经十…

【Ubuntu】在Ubuntu中设置永久的DNS
1、问题描述 ping不通域名,比如“ping www.baidu.com”时,报错“ping: unknown host www.baidu.com”。这是因为ubuntu默认情况下没有设置DNS。 在ubuntu上设置DNS的方法,修改“/etc/resolv.conf”,添加“nameserver 8.8.8.8”&a…

实习期间问题总结
主要针对实习期间,接触的部分问题进行总结,后续会不间断的补充,作为实习期间的回顾。 1,git ,github和gitlab的关系 git 是一个版本控制工具,github是一个用git做版本控制的项目托管平台,他是一个网站&…

在windows sever 2008系统中如何添加桌面体验功能
1.开启THEMES服务:运行-services.msc -找到Themes服务项,默认是禁用,改为自动。 2.运行服务器管理器:左窗口选择功能-右边点“添加功能”在弹出的“添加功能向导”窗口中拖到最下面,…

17篇论文入选CVPR 2019,百度AI都在关注什么?(附论文地址)
整理 | 阿司匹林出品 | AI科技大本营(公众号id:rgznai100)计算机视觉和模式识别大会CVPR 2019即将于6月在美国长滩召开,作为人工智能领域计算机视觉方向的重要学术会议,CVPR每年都会吸引全球最顶尖的学术机构和公司的研…

【GStreamer】在x264enc中设置profile级别
1、问题描述 在使用GStreamer生成h.264的rtmp流时,不知道怎么设置h.264的profile级别。默认一直是“high”: video/x-h264, ... profile=(string)high, ...2、解决方法 查看官网手册中,有如下解释 The H264 profile that is eventually used depends on a few settings. …

js 使用a标签 下载资源
文档 let data new Blob([hello ajanuw], {type: application/text})let src window.URL.createObjectURL(data)let dl document.createElement(a)dl.href src;dl.download hello.txtdl.click() 切片下载 let data new Blob([hello ajanuw], {type: application/text }) …

linux 新增swap分区
由于用vmware 物理机转换成虚拟机时 忘记把swap 分区转过来了,只能手动在系统里添加了 1建立1G 大小的交换分区 # dd if/dev/zore of/opt/swapfile bs1M count1024 2,设置交换分区文件 # mkswap /opt/swapfile 3.立即启用交换分区文件 # swapon /opt/swapfile 4.使系…

通过cookies跳过验证码登陆页面,直接访问网站的其它URL
我每次手动访问去NN网的一家酒店,就不需要登陆,一旦我用脚本打开就会让我登陆,而登陆页面又有验证码,不想识别验证码,所以就想:“通过cookies跳过验证码登陆页面,直接访问网站的其它URL”转载虫…

可视化深入理解损失函数与梯度下降 | 技术头条
作者 | Hugegene译者 | 刘畅责编 | Rachel出品 | AI科技大本营(id:rgznai100)【导语】本文对梯度函数和损失函数间的关系进行了介绍,并通过可视化方式进行了详细展示。另外,作者对三种常见的损失函数和两种常用的激活函…

【Qt】Linux上设置自启动后qApp->applicationDirPath()的返回值问题
1、问题描述 开发程序过程中,使用qApp->applicationDirPath()返回程序所在目录,一直没问题。但是在设置自启动后,qApp->applicationDirPath()返回的目录不是程序所在目录。 2、原因分析 查看qApp->applicationDirPath()官方手册&…

sqlserver 行转列
还写了一篇Linq 实现 DataTable 行转列有时间大家可以看一下 sqlserver把行转成列在我们编码中是经常遇到的我做一个小例子大家看一下 1 --创建一个表 2 create table PayPhoneMoney 3 ( 4 id int identity(1,1), 5 userName Nvarchar(20), 6 payType nvarchar(20)…

Javascript闭包和闭包的几种写法及用途
好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了。好了,进入正题,今天来说一说javascript里面的闭包吧!本篇博客主要讲一些实用的东西,主要将闭包的写法、用法和用途。 一、什么是闭包和闭…

【GStreamer】使用capsfilter设置x264enc中的profile级别
1、问题描述 在【GStreamer】在x264enc中设置profile级别中,通过设置x264enc的属性,只将profile由high级别切换到main,但是在切换到baseline时,失败了。 2、解决方法 这里使用capsfilter,直接指定x264enc的profile。相关代码如下: // 创建元素 GstElement *h264enc =…

一文帮你梳理清楚:奇异值分解和矩阵分解 | 技术头条
作者 | K. Delphino译者 | Linstancy编辑 | Rachel出品 | AI科技大本营(id:rgznai100)【导读】在推荐系统的相关研究中,我们常常用到两个相关概念:矩阵分解和奇异值分解。这两个概念是同一种算法吗?两者到底…

[转]程序员技术练级攻略
2019独角兽企业重金招聘Python工程师标准>>> 月光博客6月12日发表了《写给新手程序员的一封信》,翻译自《An open letter to those who want to start programming》,我的朋友(他在本站的id是Mailper)告诉我࿰…

聊天机器人落地及进阶实战 | 公开课速记
嘉宾 | 邵浩编辑 | suiling来源 | AI科技大本营在线公开课近年来,聊天机器人技术及产品得到了快速的发展。聊天机器人作为人工智能技术的杀手级应用,发展得如火如荼,各种智能硬件层出不穷。本次公开课中,AI科技大本营联合电子工业…

【GStreamer】官网基本教程学习(basic-tutorial)
目录 下载和编译basic-tutorial-1.c 直接创建管道播放视频basic-tutorial-2.c 创建元件-->装入管道-->连接元件0、gstreamer 函数调用顺序1、元素 videotestsrc 的 pattern 属性详解2、GST_BIN 将其它类型指针转换成 GstBin*basic-tutorial-3.c 信号触发后再连接元件0、g…

IdentityServer4关于多客户端和API的最佳实践【含多类型客户端和API资源,以及客户端分组实践】【中】...
上一篇文章中,我们已经完成了服务端数据库的搭建,本篇主要处理多【传统HTTP】【依赖CORE环境】客户端之间协同在线【SSO】以及不需要SSO的场景处理。 目标: 1)实现多类型客户端接入IdentityServer 后文简称【IDSV】 2)…

WEB SSH Ajaxterm客户端配置(1)
Ajaxterm是一款基于Web的SSH客户端软件,它是采用Python编写的,这也就保证了它能在多种Linux发行版的系统中使用,同时它的安装非常简单。实验环境:Centos 5.5 ip:192.168.20.165pcre-7.8.tar.gzAjaxterm-0.10.tar.gzn…

如何为回归问题选择最合适的机器学习方法?
作者 | 何从庆本文经授权转载自 AI算法之心(id:AIHeartForYou)在目前的机器学习领域中,最常见的三种任务就是:回归分析、分类分析、聚类分析。在之前的文章中,我曾写过一篇《15分钟带你入门sklearn与机器学…

【Qt】获取本地IP(IPv4)
1、问题描述 获取本地IP列表有“127.0.0.1”、IPv4、IPv6等,一般使用IPv4,如何从已经获取的IP列表中挑出IPv4。 2、解决方法 QString ipv4; auto ips = QNetworkInterface::allAddresses(); foreach (auto ip, ipps) {if ( (ip.

2.2元组介绍+字符串操作
元组可以理解为“一旦创建就不能再修改的列表”,所以也叫只读列表 语法:names("A","B","C","D") 他只有两个方法: ①count ②index 字符串操作: 示例:name"chan" 1…

医生再添新助手!深度学习诊断传染病 | 完整代码+实操
作者 | Dipanjan (DJ) Sarkar译者 | Monanfei编辑 | Rachel、Jane出品 | AI科技大本营(id:rgznai100)【导读】文本基于深度学习和迁移学习方法,对疟疾等传染病检测问题进行了研究。作者对疟疾的检测原理以及迁移学习理论进行了介绍…

DIV限制宽度,字符断行,避免变形
代码如下:<div style"width:740px;word-break:break-all;word-wrap:break-word;">参考文章怎么强制限制div宽度转载于:https://www.cnblogs.com/leftfist/archive/2012/02/07/4258078.html

【渗透】node.js经典问题
1.循环问题 当循环调用 require() 时,一个模块可能在未完成执行时被返回。例如以下情况:a.js: exports.done false; const b require(./b.js); console.log(在 a 中,b.done %j, b.done); exports.done true; console.log(a 结束); b.js: console.log…

【Qt】Ubuntu下Qt应用程序自启动设置
1、问题描述 第一步,确保手动启动Qt程序没有报错!如果报以下错误,参见博客 qt.qpa.xcb: could not connect to display qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found. This application failed to s…

Tarjan算法应用 (割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)问题)...
转载自:http://hi.baidu.com/lydrainbowcat/blog/item/2194090a96bbed2db1351de8.html 基本概念: 1.割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点。 2.割点集合:在一个无向连通图中࿰…

【JavaScript】Ubuntu16.04安装vscode+npm+yarn
一、安装vscode vscode官网(https://code.visualstudio.com/)下载linux deb文件 下载deb后,使用dpkg -i 命令安装 sudo dpkg -i code_1.45.1-1589445302_amd64.deb在终端执行命令code来启动vscode 二、安装nodejs curl -sL https://deb…

C++大数加法
1 #include <iostream>2 #include<deque>3 #include<string>4 5 using namespace std;6 7 string add(string a, string b) //此函数默认a的长度大于b(可以在main函数里用if语句控制a的长度大于b)8 {9 deque<int>sum; //sum用来存储和的每…