MySQL FailOver(官方自带,free)
为什么
传统复制和GTIDs切换的缺点
当replication故障出现之后,最头疼是replication架构的调整
一旦master down了,就需要配置某一台slave作为master
slave上开启二进制日志文件,写操作配置成新的slave。
如果架构是MSS,新的relay提升为master,后面的slave都需要change master to host,binlog-file,postion。还得保证数据的一致性,所以所要花费的时间很长
GTIDs只需要change master to new_host,但是在每台机器都要执行
所以我们使用mysql自带的fail-over,并且提供它提供python API。后期可以整合到自动运维平台中去
下载与安装软件
MySQL Utilities https://dev.mysql.com/downloads/utilities/
##maintaining and administering MySQL servers
Connector/Python https://dev.mysql.com/downloads/connector/python/
## a standardized database driver for Python platforms and development
yum install mysql-connector-python-2.1.3-1.el6.x86_64.rpm mysql-utilities-1.5.6-1.el6.noarch.rpm -y
服务搭建:
环境准备
monitor server1 192.168.88.121 ##监控最好有独立的服务器
master server2 192.168.88.122
slave server3 192.168.88.123
slave server4 192.168.88.124
监控机需要连接到MS上,获取运行状态
授权: 基本的:super, replication,slave,reload,
有些时候,当多个程序运行mysql failover,##监控避免单点
create,insert,drop,select (--force否则failed,一旦出错就会停止复制)
grant create,insert,drop,select,super,replication slave,reload on *.* to repm@192.168.88.121 identified by '123' with grant option;
检测授权是否成功
show grants for 'repm'@'192.168.88.121'
在monitor测试mysql -urepmon -predhat -h 192.168.88.122
配置文件
##删除skip-slave-start
+++增加配置
#add fail-over
report-host=自己IP ##向监控端报告自己的IP
master-info-repository=table ##将主机信息保存在表中
relay-log-info-repository=table ##将中继信息保存在表中
+++
将相应的replication配置的缓存文件保存到数据表中,一般的情况下,slave它的master的相关信息以及复制当前的信息保存在master.info和relay-log.info,用处:在重新启动mysqld,mysql将自动启动slave,而主机的信息和复制的信息就通过这两个文件中的信息来获取
如果想自动化监控复制和切换,故障出现,就得重新指定master和binlog,position,如果保存在文件中的话,可能监控端需要相关的权限操作文件,所以可以在mysql的表中,这样修改的,也可以实时生效
注意:如果把master和relay-info保存在mysql的表,mysql锁创建的表是Myisam表,但是官方建议使用Innodb存储引擎,5.6之后呢默认时innodb,避免Myisam的自动修复功能
修改完成重启mysqld。
注意下mysql数据库中slave_master_info slave_relay_log_info两张表
启动监控端:
mysqlfailover --master=repmon:redhat@192.168.88.122 --discover-slaves-login=repmon:redhat
--master指定M,后接"用户名:密码@host"
--discover-slaves-login自动发现slave。后接连接slave的用户名和密码
--log=file.log ##指定日志
--failover-mode ##auto(default,没有slave可选就退出),elect(在制定的slave选取),fail(用于监控,没有failover)
#####
GTID Executed Set
c09756b8-a7e7-11e5-9468-000c29df5442:1-24
WARNING: Errant transaction(s) found on slave(s).
Replication Health Status
+-----------------+-------+---------+--------+------------+---------+
| host | port | role | state | gtid_mode | health |
+-----------------+-------+---------+--------+------------+---------+
| 192.168.88.122 | 3306 | MASTER | UP | ON | OK |
| 192.168.88.123 | 3306 | SLAVE | UP | ON | OK |
| 192.168.88.124 | 3306 | SLAVE | UP | ON | OK |
+-----------------+-------+---------+--------+------------+---------+
#####
现在测试功能
停掉master,看slave是否接管master,并调整架构
/etc/init.d/mysqld stop
下面是monitor上的调整信息
Failed to reconnect to the master after 3 attemps.
Failover starting in 'auto' mode...
# Candidate slave 192.168.88.123:3306 will become the new master.
# Checking slaves status (before failover).
# Preparing candidate for failover.
# Creating replication user if it does not exist.
# ERROR: ERROR: Cannot grant replication slave to replication user.
# Stopping slaves.
# Performing STOP on all slaves.
# Switching slaves to new master.
# Disconnecting new master as slave.
# Starting slaves.
# Performing START on all slaves.
# Checking slaves for errors.
# Failover complete.
# Discovering slaves for master at 192.168.88.123:3306
######新的架构
b89f9be8-a8af-11e5-9980-000c29ccacd8:1-2 [...]
Transactions executed on the servers:
+-----------------+-------+---------+--------+------------+---------+
| host | port | role | state | gtid_mode | health |
+-----------------+-------+---------+--------+------------+---------+
| 192.168.88.123 | 3306 | MASTER | UP | ON | OK |
| 192.168.88.124 | 3306 | SLAVE | UP | ON | OK |
+-----------------+-------+---------+--------+------------+---------+
####
在新的master(server3)上测试插入之后数据时候同步
但是当原来的master(server2) 恢复会正常的时候,mysql failover是不能够自动发现,并调整为原来的架构的。
所以要把master添加到集群,只能手动的调整
> change master to
> master_host='192.168.88.123',
> master_user='rep',
> master_password='redhat',
> master_auto_position=1;
此时监控端又可以检测到server2了
MySQL FailOver(官方自带,free)的更多相关文章
- (转)MySQL数据表中带LIKE的字符匹配查询
MySQL数据表中带LIKE的字符匹配查询 2014年07月15日09:56 百科369 MySQL数据表中带LIKE的字符匹配查询 LIKE关键字可以匹配字符串是否相等. 如果字段的值与指定的 ...
- MySQL优化|一分钟带你了解单表优化
在开始前,分享给大家我看过觉得讲数据库讲的算是很不错的,也在B站拥有百万播放量的教程. 这个MySQL视频是动力节点的老杜讲解,个人也很喜欢老杜的教学风格,老杜真的是从MySQL基础一点点带我入门,基 ...
- [转]Android UI:看看Google官方自定义带旋转动画的ImageView-----RotateImageView怎么写(附 图片淡入淡出效果)
http://blog.csdn.net/yanzi1225627/article/details/22439119 众所周知,想要让ImageView旋转的话,可以用setRotation()让其围 ...
- Unity 官方自带的例子笔记 - Space Shooter
首先 买过一本叫 Unity3D开发的书,开篇第一个例子就是大家经常碰见的打飞机的例子,写完后我觉得不好玩.后来买了一本 Unity 官方例子说明的书,第一个例子也是打飞机,但是写完后发现蛮酷的,首先 ...
- Android UI:看看Google官方自定义带旋转动画的ImageView-----RotateImageView怎么写(附 图片淡入淡...)
众所周知,想要让ImageView旋转的话,可以用setRotation()让其围绕中心点旋转,但这个旋转是不带动画的,也就是旋转屏幕时图片噌的一下就转过去了,看不到旋转的过程,此UI体验不大好,为此 ...
- centos7在线yum安装mysql时官方镜像下载过慢的解决方案
帮客户调试数据库,搭建一测试环境,centos7最小化安装后,在线安装mysql. 步骤: 1. wget -i http://dev.mysql.com/get/mysql57-community- ...
- jnhs中国省市县区mysql数据表不带gps坐标
1.查省 SELECT * FROM china WHERE china.Pid=0 2.查市 SELECT * FROM chinaWHERE china.Pid=330000 3.查区 SELEC ...
- mysql截取函数常用方法 即mysql 字符串 截取-- - 最后带上java字符串截取规则比较
常用的mysql截取函数有:left(), right(), substring(), substring_index() 下面来一一说明一下: 1.左截取left(str, length) 说明:l ...
- python 作业 用python实现 mysql查询结果导出带列名
1 import pandas as pd 2 import numpy as np 3 import matplotlib as mpl 4 import matplotlib.pyplot as ...
随机推荐
- React中Transition的作用
/** * `Transaction` creates a black box that is able to wrap any method such that * certain invarian ...
- sublime text2 相关插件及其应用
一.常见的插件 1.Emmet 'ctrl+up':切换文件: "ctrl+alt+enter":创建新的div标签: "shift+ctrl+." :查找相同 ...
- FZU1686 神龙的难题 —— Dancing Links 可重复覆盖
题目链接:https://vjudge.net/problem/FZU-1686 Problem 1686 神龙的难题 Accept: 812 Submit: 2394 Time Limit: ...
- eclipse安装lombok和常用注解使用
1.下载lombok.jar lombok 的官方网址:http://projectlombok.org/ 2.运行lombok.jar: java -jar D:\eclipse-luna\l ...
- wukong引擎源码分析之索引——part 1 倒排列表本质是有序数组存储
searcher.IndexDocument(0, types.DocumentIndexData{Content: "此次百度收购将成中国互联网最大并购"}) engine.go ...
- 「 LuoguT37042」 求子序列个数
Description 给定序列 A, 求出 A 中本质不同的子序列 (包含空的子序列) 个数模 10^9+ 7 的结果. 一个序列 B 是 A 的子序列需要满足 A 删掉某些元素后能够得到 B. 两 ...
- Myeclipse----Hibernate环境搭建
使用myEclipse来生成hibernate 持久化类和映射文件 总体步骤:创建数据库----创建web工程----创建数据视图中的数据库-----导入hibernate框架需要的capabilit ...
- 【转】 IntelliJ IDEA 中 Project 和 Module 的概念及区别
原文地址:https://blog.csdn.net/qq_35246620/article/details/65448689 在 IntelliJ IDEA 中,没有类似于 Eclipse 工作空间 ...
- qunar面试题及一位大牛的解答
本文摘自:http://www.cnblogs.com/jarson-7426/p/3989208.html 1.写一个函数padstare(string str1,min_lenthg,string ...
- List集合与Array数组之间的互相转换
1.数组转换成List集合 采用java中集合自带的asList()方法就可以完成转换了 String[] array = new String[] {"zhu", "w ...