MySQL MHA部署 Part 6 MHA故障转移测试
实验环境
此次实验的环境如下
- MySQL 5.7.25
- Redhat 6.10
- 操作系统账号:mysql
- 数据库复制账号:repl
- 复制格式:基于行的复制
- MHA版本: 0.56
IP地址 |
主从关系 |
复制账号 |
复制格式 |
---|---|---|---|
11.12.14.29 |
主库 |
repl |
Row-Based |
11.12.14.30 |
从库(半同步/备master) |
repl |
Row-Based |
11.12.14.39 |
从库(异步) |
repl |
Row-Based |
11.12.14.40 |
管理节点 |
无 |
无 |
11.12.14.41 |
VIP |
无 |
无 |
1 检查现有状态
我们可以先通过 show slave statusG查看从库同步是否正常
2 打开管理节点日志
我们通过如下命令事实查看切换过程
tail -f /etc/mha/manager/mha.log
3.关闭主库
我们通过如下命令关闭主库
service mysqld stop
4 日志分析
这时我们查看你管理阶段的日志输出
4.1 发现并检测主库状态
从上图可以看出,首先管理节点发现MySQL服务挂掉,之后调用masterha_secondary_check脚本分别从另外2个从库检查主库,发现也无法连接
4.2 重新检查所有服务器状态
从上图可以看出,mha重新读取配置文件并确认数据库状态
- Dead Servers
- Alive Servers
4.3 failover第一阶段-配置文件确认
接下来进入master failover第一阶段-配置文件确认
这里还是确认阶段
4.4 failover第二阶段-关闭主库
从上图可以看出调用了master_ip_failover脚本将VIP从主库移除
我没有定义shutdown_script,所以没有调用
4.5 failover第三阶段-主库恢复阶段
这个阶段分为如下几个部分
4.5.1 获取最新的slave
4.5.2 决定新的主库阶段
4.5.3 新主库恢复阶段
从上图可以看出首先应用日志,之后生成从库重新同步的语句,之后在新主库上启用VIP
4.6 failover第四阶段-从库恢复阶段
该阶段主要为将从库的同步指向新的主库,
这里需要注意的是,如果采用了基于二进制位置点的复制,如果从库启用了GTID,这时会自动采用GTID形式的复制而不是基于位置点的,即 show slave statusG 时auto_position为1
4.7 failover第五阶段:清理阶段
这一阶段首先将新的主库的slave信息清除
如果前面启动mha时加了--remove_dead_master_conf参数,则会将旧的主库的信息删除
4.8 failover报告
最后日志会打印failover过程的报告,如图
以上就是一个完整的failover过程,这时可以手动查看各节点信息
5. 注意事项
- 在完成failover后MHA进程会自动退出
- VIP会从旧的主库漂移到新的主库
- 如启用了GTID,从库的同步会自动切换到GTID模式
- 在做主从同步的时候建议清理下从库相关信息 reset master及reset slave all
- 新的主库会自动将read_only设为OFF
- failover完成后记得删除mha.failover.complete文件,否则再次启动后会发生故障会无法failover
- failover完成后,旧主库会从配置文件中删除
6. 参考资料
https://www.percona.com/blog/2016/09/02/mha-quickstart-guide/
http://www.ttlsa.com/mysql/step-one-by-one-deploy-mysql-mha-cluster/
https://www.cnblogs.com/ivictor/p/5686275.html
- WordPress酷炫CSS3读者墙,排名按年度、本月、本周划分的小方法
- WordPress给文章添加百度是否已收录查询和显示功能(自定义栏目优化版)
- PHP制作百度站内搜索绿色通道的网页列表数据文件
- 分享几个可用的二维码API,以及给博客添加文章二维码图片的方法
- AI即开即用,这是悄然推出的“腾讯最新AI技术”小程序
- Android Linker 与 SO 加壳技术
- Go语言操作mysql数据库简单例子
- go语言的sql包原理与用法分析
- WordPress免插件生成完整站点地图(sitemap.xml)的php代码
- Go语言常用字符串处理方法实例汇总
- 硬盘故障时如何强制关机:Input/output error
- 举例讲解Go语言中函数的闭包使用
- 实现WordPress提交评论的时删除该页面的WP-Super-Cache缓存的方法
- php自动生成百度开放适配PC页-手机页pattern对应关系sitemap.xml
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- nohup 退出终端不退出任务
- windows 下Redis开机自启动
- 机器学习基础:决策树的可视化
- 持续部署入门:基于 Kubernetes 实现蓝绿发布
- PHP 实现Redis发布订阅消息及时通讯
- 简单几步,用云开发搞定短信验证码登录
- 重要的进程就让Supervisor 来守护吧!
- 机器学习基础:令你事半功倍的pipeline处理机制
- django 中如何将字典变量传给template视图层的JS
- Spring第三天:Spring的AOP的注解开发、Spring的声明式事务、JdbcTemplate
- Spring Boot中集成Slf4j 与Logback
- 一文搞定 Linux 常用高频命令
- 推荐一款科研必备的Python数据可视化神器——PyQtGraph
- 机器学习基础:可视化方式理解决策树剪枝
- 神级代码注释-这次是来搞笑的