当前位置: 首页 > news >正文

mysql 故障检测与处理

文章目录

    • 故障检测
      • 外部检测:心跳轮询
      • 内部统计,时间检测
      • 外部检测和内部统计对比
    • 故障处理
      • 主从切换:同步位点方案
        • 从库C如何跳过重复日志
      • 主从切换:GTID方案
        • 同步位点方案和GTID方案对比

故障检测

外部检测:心跳轮询

检查方式检测目标适用场景
select 1服务进程存活基础存活
建一个health_check表 select * from mysql.health_check并发进程没有达到上限(innodb_thread_concurrency)常规业务
update mysql.health_check set t_modified=now()验证能否正常进行写事务提交关键业务

update:如果是双主架构,需要改成insert into mysql.health_check(id, t_modified) values (@@server_id, now()) on duplicate key update t_modified=now();

每个库分别执行自己的语句,避免更新同一条语句引发冲突。

内部统计,时间检测

开启performance_schema表中的相关统计项、redo log时间检测等

外部检测和内部统计对比

外部检测需要定时轮询,发现问题不及时;内部统计更准确,但开启会占用一定的性能。要注意搭配使用。

故障处理

自动故障转移:vip(virtual ip)漂移、DNS更新,可以用MHA自动管理

一主多从,主库A挂了,找出新的主库B后就要同步数据(主从切换)。可以通过位点、GTID等方式进行同步。

主从切换:同步位点方案

一主多从,主库A挂了,找出新的主库B后就要同步位点。因为原来节点B也是A的从库,本地记录的A的位点。但相同的日志,A的位点和B的位点是不同的。所以从库C要切换主库A=>B时,就需要先找到同步位点。

流程:

  • 等待新主库B把中转日志(relay log)同步完;
  • 在B上执行show master status得到当前B上最新的File和Position;
  • 取原主库A故障的时刻T;
  • 用mysqlbinlog解析B上的File,得到T时刻的位点;

在这里插入图片描述

从库C如何跳过重复日志

C收到重复的任务执行一般会返回错误,常见错误:

  • 1062 插入时唯一键冲突
  • 1032 删除时找不到

所以我们可以在一段时间内将slave_skip_errors设置为“1032,1062”,等待同步完成再恢复“”。// 不能一直不恢复,会跳过真正的错误

或者跳过所有错误跳过几次:

set global sql_slave_skip_counter=1;
start slave;

主从切换:GTID方案

GTID=source_id:gno // 全局唯一,gno值可以指定,也可以通过gtid_next=automatic设置使用默认值

在这里插入图片描述

  • 从库C把自己的gtid list发给B,B发现不差,就不用给它发了

  • 如果B在算差值时,发现有从库需要的日志但在B上没有,认为有问题,直接返回错误:Slave has more GTIDs than the master

    比如:延迟从库被选为新主库,就会在主库删除数据宕机后,其他库的数据比延迟从库多,就会报错停下来需要人工处理,判断一下是误删还是正常删除再恢复主从关系。延迟从库正常不会被选为主库。

同步位点方案和GTID方案对比

同步位点方案和GTID方案在同步日志上思想不同:

  • 同步位点:是从库决定从哪个位点开始要日志,主库不做完整性判断
  • GTID:是主库计算差值,并判断从库需要日志是否完整,再向从库发送日志
http://www.dtcms.com/a/271279.html

相关文章:

  • Linux 测开:日志分析 + 定位 Bug
  • Paimon 原子提交实现
  • 【Linux】Rocky Linux 安装 Docker 与 Docker-Compose
  • AI智能选股,DeepSeek智能分析股票测试
  • 搭建一款结合传统黄历功能的日历小程序
  • C++最小生成树算法详解
  • 人机协同的关键枢纽:软件工程3.0中对象模型与模型驱动的融合路径
  • Vue 3 中父子组件双向绑定的 4 种方式
  • 如何将 AWS EBS 卷从 gp2 批量迁移到 gp3:完整指南
  • 基于Spring Boot+Vue的DIY手工社预约管理系统(Echarts图形化、腾讯地图API)
  • [Pytest][Part 4]多种测试运行方式
  • docker部署华为高斯数据库opengauss(arm版本)
  • 1.1 ARMv8/ARMv9安全扩展
  • 解决SQL Server SQL语句性能问题(9)——SQL语句改写(6)
  • 【PDF提取内容改名】批量提取pdf多个指定区域内容到excel表格的操作步骤和方法
  • NLP革命二十年:从规则驱动到深度学习的跃迁
  • Spring Boot 项目中多数据源配置使用场景
  • 美股异动|机器人概念表现活跃,微美全息(WIMI.US)瞄准高增长赛道涨超14%
  • 丰田将协作机器人与现有设备相结合,以实现超高负载能力和安全性
  • 焊接机器人智能节气装置
  • Deepoc具身智能大模型:物流机器人的神经中枢如何重塑现代供应链
  • Android ttyS2无法打开该如何配置 + ttyS0和ttyS1可以
  • 板凳-------Mysql cookbook学习 (十一--------6)
  • Android 12 - 部分相机横屏显示方案
  • Docker高级管理--容器通信技术与数据持久化
  • 记录跟随recyclerview滑动的指示器
  • 智能避让+自动换针:三坐标让汽车检具测量安全又高效
  • 小鹏汽车6月交付车辆34,611辆,同比增长224%
  • 实现子系统深度融合,IBMS系统消除信息孤岛释放价值潜力
  • 云成本优化的核心原则与框架