半同步复制,从库的日常管理和错误处理

2023-10-30

推荐的清理purge的方法:

>purge binary logs to 'mybin.log000001';

半同步复制
主库产生binlog到主库的binlog file,传到从库中继日志,然后从库应用。
即:传输是异步的,应用也是异步的。

半同步复制指的是传输同步,应用还是异步的。

  • 好处:保证数据不丢失(本机和远端都有binlog)
  • 坏处:不能保证应用的同步。

半同步复制的原理:
(半同步复制的流程:)
这里写图片描述
(即 主库忽然崩了时,从库虽然说有延迟,但是延迟过后,可以把从库提升为主库继续服务,事后恢复到主库即可)

(MySQL的异步复制流程:)
这里写图片描述

如何实现半同步复制?
半同步复制是一个功能模块,库要能支持动态加载才能实现半同步复制!

  • ①看库是否支持动态加载(现在一般都支持)
> select @@have_dynamic_loading;

这里写图片描述

  • ②主从库上分别安装插件

在主库上安装插件 semisync_master.so

> install plugin rpl_semi_sync_master soname 'semisync_master.so';

在从库上安装 semisync_slave.so

> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
  • ③安装完成后,从plugin表中能够看到刚才安装的插件
select * from mysql.plugin;
  • ④分别在主从库打开半同步复制(可加到配置文件里)
> set @@global.rpl_semi_sync_master_enabled=on;
> set @@global.rpl_semi_sync_slave_enabled=on;

当一主多从

  • ⑤重启一下从库的IO
> start slave io_thread;
> start slave io_thread;
(stop slave;  -->IO和应用线程)
  • ⑥查看半同步状态
> show global status like '%rpl%';

这里写图片描述
(图是主库在压测的时候的状态)

Rpl_semi_sync_master_clients  
Rpl_semi_sync_master_net_avg_wait_time:网络等待的平均时间
Rpl_semi_sync_master_net_wait_time:网络等待时间       
Rpl_semi_sync_master_net_waits       
Rpl_semi_sync_master_no_times    
Rpl_semi_sync_master_no_tx:大于0就是异步。半同步是应为0            
Rpl_semi_sync_master_status        
Rpl_semi_sync_master_timefunc_failures
Rpl_semi_sync_master_tx_avg_wait_time:平均等待时间
Rpl_semi_sync_master_tx_wait_time:总的等待时间       
Rpl_semi_sync_master_tx_waits
Rpl_semi_sync_master_wait_pos_backtraverse 
Rpl_semi_sync_master_wait_sessions 
Rpl_semi_sync_master_yes_tx:大于0就是 同步模式

开启半同步复制意味着什么?
在主库开启一个事务,这个事务在主库和远端的从库各存一份。此时 Rpl_semi_sync_master_yes_tx 的值加一。忽然断网时,会有10s的hang住(rpl_semi_sync_master_timeout =10000),然后mysql会自己关闭主从复制。然后变成异步。此时Rpl_semi_sync_master_yes_tx 值不变了,而Rpl_semi_sync_master_no_tx 的值就开始加一。

  • ⑦模拟断网时的状态
# iptables -A INPUT -s IP -j DROP
-A:处理INPUT
-s:源地址
-j:处理的策略是DROP

会发现,压测的trx忽然降低,但不会降低为0。因为此时变成了异步。但是一会儿之后,mysql会自动恢复到同步。


从库的日常管理和错误处理

  • 1、master_connect_retry 参数
mysql> change master to 
master_host='192.168.159.131',
master_user='congku',
master_password='123123',
master_log_file='mastera.000028',
master_log_pos=245,
master_connect_retry=10;    
#连接主库失败时,每隔10s钟就重新连一下
  • 2、log_slave_updates参数

用来配置一级从库是否写二进制日志。此参数要和–logs-bin 参数一起使用。

  • 3、–read-only 参数

用来设置从库只能接受root的更新操作,限制了应用程序错误的对从库的更新操作。使用后,保证了主从的一致性,从库的更新就只能来自于主库的更新了。可在从库启动时启动,也可以加到配置文件。

# mysqld_safe --defaults-file=/etc/my.cnf --user=root --read-only
  • 4、–replicate-do-table 参数

从库启动时添加。实现了从库的分拆,将从库分拆成多个不一致的从库,分别同步不同的库或表。
(例如,让四个从库来同步一个主库,这样应用延迟就会降低。
主库的日志会分4个完整的,传给4个从库。然后从库都接到后,再看是对谁做的操作,例如是对促销的相关操作。就只有对应的2号从库更新。)
事务层面:主库的事务不能跨组操作,只能操作某个组里面的2个!
此参数使用的限制:
这里写图片描述

  • 5、slave-skip-errors 参数

在复制过程中,从库可能由于各种原因遇到执行binlog中的SQL出错的情况(比如主键冲突),默认情况从库将会停止复制进程,等待用户处理,不再进行同步(hang住)。
此参数的作用就是用来定义复制过程中从库可以自动跳过的错误号。
取值:ddl_exist_errors(具体错误号)、all
用法:

#mysqld_safe --slave-skip-errors=1064  --defaults-file=/etc/my.cnf &

PS:1064错误,是常见的sql语法不对时出现的错误。
从库如何处理sql应用出现的错误?

  • ①slave-skip-errors 为all
    时,忽略所有错误。为ddl_exist_errors(具体错误号)时,跳过这一个错误。(自动)
  • ②set global sql_slave_skip_counter=n:n的值为1或2。如果来自主库的更新语句不使用auto_increment 或 last_insert_id(),n值应为1,否则为2。(手工)然后重启stop slave;start slave;

这里写图片描述
上面的这一个sql,会生成2条日志,如果想在同步时跳过这条sql,n=2即可。
怎么监控:> show slave status \G #看读和执行的pos是不是在快速的缩短。

  • 6、log event entry exceeded max_allowed_packet 的处理

如果应用中使用大的blog列或者长字符串,那么在从库上进行恢复的时候,可能会出现”log event entry exceeded max_allowed_packet”错误,这是因为含有大文本的记录无法通过网络进行传输导致。解决的办法就是在主从库上增加 max_allowed_packet 参数的大小。默认值1MB。可按实际需要修改。

#set global max_allowed_packet =16MB;

Create By LPeng

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

半同步复制,从库的日常管理和错误处理 的相关文章

  • Spring boot_公众号模板消息

    1 pom引入
  • 算法笔试题_2

    给定一个 N 进制正整数 把它的各位数字上数字倒过来排列组成一个新数 然后与原数相加 如果是回文数则停止 如果不是 则重复这个操作 直到和为回文数为止 如果 N 超过 10 使用英文字母来表示那些大于 9 的数码 例如对 16 进制数来说
  • 大数据技术与人工智能的关系

    结合了学习的知识和网上的相关资料 我个人觉得大数据与人工智能的关系如下 人工智能需要数据来建立其智能 特别是机器学习 大数据技术为人工智能提供了强大的存储能力和计算能力 如果说大数据相当于人的大脑存储了海量知识 而人工智能则是吸收了大量的数
  • the sip module implements API v12.0 to v12.8 but the PyQt5.QtGui module requires API v12.9

    问题描述 RuntimeError the sip module implements API v12 0 to v12 8 but the PyQt5 QtGui module requires API v12 9 分析原因 pyqt更新
  • Git Extension工具安装及使用

    以下界面所示的三个工具 如果没安装过 则勾上让其安装 MsysGit为Git的Windows版本 必须要安装 Kdiff为对比 合并工具 可选安装 可以换为使用其它的相关工具 最后一个Windows Credential Store for
  • java判断char是否相等

    在 Java 中可以使用 运算符来判断两个 char 类型的变量是否相等 例如 char c1 a char c2 b if c1 c2 System out println c1 is equal to c2 else System ou
  • 转:Python数据分箱,计算woe,iv

    转自 https zhuanlan zhihu com p 38440477 https www cnblogs com wzdLY p 9853209 html https github com Lucky Bone Discretiza
  • SQL语句的基本常用的一些语法

    1 ORDER BY 字段名 以 排序 如 select from A order by id desc 从大 gt 小 asc 从 小 gt 大 2 Group By 字段名 以 分组 select from A group by id
  • IOTDB-源码解析-查询

    单机查询流程 QueryPlan类 QueryPlan是有关查询相关的类 所有的plan都继承了PhysicalPlan这个虚类 QueryPlan也是一个虚类 其UML类图如下所示 IotDB中的各种reader 此章节请酌情参考查询基础
  • 白盒测试(基本路径法)代码

    白盒测试的一种常用方法是基本路径法 根据源代码构造程序流程图 转换为控制流图 得到基本路径 进而为每条基本路径设计测试用例 基本路径法的一个关键步骤是识别出所有的基本路径 本次作业要求你写一个C 程序 输入 待测程序的控制流图 输出 圈复杂
  • chisel环境安装

    step 0 把java装好 chisel依赖于java的 所以第一步你要装个java 去oracle官网去下载 下面网站 Java SE Development Kit 8 下载 www oracle com 如果你恰好家境贫寒 就下上面
  • 关于多项目使用Maven子工程无法使用

    前几天在网上找了一个商城的项目实战遇到一个问题 导入各种包但是Spring的核心配置文件还是全篇爆红 我自己记录一下我的解决方案 因为是多项目的问题 我当时创建文件的时候都把文件建在了Maven的parent目录下 所以无法导包进入 将每个
  • 【Unity基础】day1整理 -----小球吃金币

    小球 先搭一个场地Plane 命名Map 通过将四个墙的立方体归入Map 可以同时控制大小 分别赋予场地和墙的材质 创造一个小球Player 赋予材质和刚体 因为要实现键盘操作控制小球 因此需要写脚本挂载到Player上 using Sys
  • 基于粒子群算法的PID控制器优化设计(matlab实现)

    1 理论基础 PID控制器应用广泛 其一般形式为 可见 PID控制器的性能取决于Kp Ki Kd这3个参数是否合理 因此 优化PID控制器参数具有重要意义 目前 PID控制器参数主要是人工调整 这种方法不仅费时 而且不能保证获得最佳的性能
  • MySQL的C++封装

    最近的项目数据库管理系统从SQL SERVER2000迁移到了MySQL上来 之前基于ADO的连接方式连接上SQL SERVER 使用MySQL数据库管理系统之后 直接在MySQL的C语言的API上以面向对象的方式封装实现了数据库的创建 表
  • C语言操作EXCEL文件(读写)

    C语言操作EXCEL文件 读写 本文主要介绍通过纯C语言进行EXCEL的读写操作 修改时间2018 08 28 如果运行结果均是0 请看文章最后一节 C语言读操作 C语言写操作 在之前需要使用C语言读取Excel文件内容的功能 查阅了很多资
  • markdown 之项目目录文件结构展示

    一般来说 我们为项目写readme文档时 都会对整个目录的项目结构做个说明 例如这样的 我们可以用mddir来生成项目目录结构 mddir 使用命令 node mddir relative path 例子 打开终端或命令提示符 并cd进入m
  • ubuntu系统离线安装docker20.10.7版本及nvidia-container-runtime3.11.0-1版本(离线安装nvidia-docker)

    1 下载3个docker相关安装包 containerd io 1 4 6 1 amd64 deb docker ce cli 20 10 7 3 0 ubuntu xenial amd64 deb docker ce 20 10 7 3
  • HTTPS

    本文首发于我的个人技术博客 看完还不懂HTTPS我直播吃翔 存在即合理 http是非常常见的应用层协议 是超文本传输协议的简称 其传输的内容都是明文的 在这个混乱的世界 明文传输信息想想就可怕 网络 小混混 的手段远比我们这些凡人高明得多

随机推荐

  • SpringBoot2-5

    先解决一个问题 报错1 java 无效的目标发行版 17 修改位置 maven的配置需要改为选取本地maven所在目录 这些都是java指定了1 8比较低但是又都用的版本导致 再解决一个问题 报错2 java 无法访问org springf
  • 《小家:越住越大》

    第一章 二八定律 房子单价很贵 但却像人一样 慢慢被不必要的杂物堆积 变得杂乱 空间不足 人需要减肥 房子也需要减负 常用的东西 20 放在随手可及的地方 不常用的东西 80 合理收纳 这就是隐藏与显示的二八定律 收纳百分之八十的生活杂物
  • 阿里开源 Dragonwell JDK 重磅发布 GA 版本:生产环境可用

    今年 3 月份 阿里巴巴重磅开源 OpenJDK 长期支持版本 Alibaba Dragonwell 的消息 在很长一段时间内都是开发者的讨论焦点 该项目在 Github 上的 Star 数迅速突破 1400 近日 Dragonwell J
  • ADC0804的使用

    一 前言介绍 这个博客主要说明ADC0804的使用 数码管的动态显示作为辅助功能 方便观察 利用滑变和5V电源来获得一个输入电压值 输入到ADC0804的输入端 二 ADC0804芯片的介绍 1 A D转换概念 即模数转换 输入模拟量 比如
  • Linux USB摄像头驱动【转】

    本文转载自 http www itdadao com articles c15a509940p0 html 在 cortex a8 中 可接入摄像头的接口通常可以分为两种 CAMERA 接口和 USB 接口的摄像头 这一章主要是介绍 USB
  • 什么是Python?

    Python由荷兰数学和计算机科学研究学会的吉多 范罗苏姆 Guido van Rossum 于1990 年代初设计 作为一门叫做ABC语言的替代品 Python提供了高效的高级数据结构 还能简单有效地面向对象编程 Python语法和动态类
  • 设计模式(单例模式、工厂模式、观察者模式)

    设计模式是什么 背景 目前企业级分布式软件开发普遍采用面向对象的方法 OOD 面向对象设计 直接导致了设计模式的发展 开发面向对象的软件是困难的 而开发可复用的面向对象的软件更难 有经验的设计者重用过去的方案 采用设计模式使设计和代码具有良
  • SWPUCTF2019web题复现

    SWPU2019 web1 easy web 有一个登录框 试了试万能密码失败 那就注册吧 登录后发现有一个申请广告 在标题处输入11111111 发现报错 应该是sql注入 禁用了or 空格等等 先使用union发现有22列 1 unio
  • 给定一系列正整数请按要求对数字进行分类并输出以下 5 个数字:A1=能被 5 整除的数字中所有偶数的和被5除后余1的数字按给出顺序进行交错求和被5除后余2的数字的个数(最后一个测试点错误原因分析)

    PAT 1012 数字分类 最后一个测试点错误原因分析 给定一系列正整数 请按要求对数字进行分类 并输出以下 5 个数字 A1 能被 5 整除的数字中所有偶数的和 A2 将被 5 除后余 1 的数字按给出顺序进行交错求和 即计算 n1 n2
  • QT模态对话框

    下面来说说模态对话框 什么是模态对话框 所谓模态 就是在对话框弹出来之后 能够阻塞后面的窗口 Windows 上一般在退出时会弹出来一个问你是否保存的对话框 就是一个模态对话框 当它出现的时候 后面的窗口是不能点击的 必须要你关闭这个对话框
  • 毕业设计-基于MATLAB的尿沉渣图像有形成分的自动分类方法的研究与实现

    目录 前言 课题背景和意义 实现技术思路 一 尿沉渣图像的预处理 二 边缘检测算法 三 有形成分的特征提取 四 使川BP神经网络对各有形成分分类 部分源代码 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为
  • js逆向-某讯漫画

    声明 本文仅供学习参考 切勿用于他途 违者后果自负 前言 今天分析一个漫画网站 其中对于图片的url进行了加密 目标网站 aHR0cHM6Ly9hYy5xcS5jb20vQ29taWMvY29taWNJbmZvL2lkLzUzMTA0MA
  • 边缘计算产业链详解

    先上福利 第 1 步 关注本公众号 分享此文到您朋友圈 第 2 步 扫描下方二维码 添加运营老师微信 将所发朋友圈的截图发给运营老师 我们会按先后顺序选出前10名小伙伴 送出 价值 99 8 元的 从云端到边缘 边缘计算的产业链与行业应用
  • kali安装及更换源(详解)

    文章目录 一 kali下载 二 kali安装 1 kali新建虚拟机 2 kali安装 3 kali更换源 本文写的稍微有点啰嗦 博主也是从小白过来的 结合了自己的经历 写的非常详细 希望不要介意 大神挑着看就行 一 kali下载 虽然ka
  • 回文串

    回文串 回文串最基本的特征就是对称 如果使用对折方式 那么要考虑奇偶的问题 所以 使用双指针的方式 习题 leetcode第125题 验证回文串 给定一个字符串 验证它是否是回文串 只考虑字母和数字字符 可以忽略字母的大小写 说明 本题中
  • 芯片测试的术语解释(FT、CP),持续更新....

    本篇是个人学习知识笔记 可能会持续更新 如有任何问题欢迎大家批评指正 ltt hkaco com 图源请参考图片水印 一 芯片的生产流程 二 芯片生产过程中涉及到的测试设备 三 后道检测中的CP测试和FT测试 1 CP测试 CP测试 英文全
  • maven settings 私服配置

    如果只设置mirrors maven不会自动根据你设置的url去寻找资源 还需要设置profile和启用profile
  • centos7安装ansible图形化管理界面AWX

    这里写目录标题 AWX简介 AWX安装 安装docker 安装docker compose 安装python 下载并安装AWX 访问web界面 AWX简介 AWX 提供基于 Web 的用户界面 REST API 和基于ansible构建的任
  • FairMOT配置(VS2019+Win10+CUDA11.0)

    配置环境 Win10 VS2019 CUDA11 0 Pytorch1 7 配置步骤 1 下载FairMOT git clone recursive https github com ifzhang FairMOT git 2 使用anac
  • 半同步复制,从库的日常管理和错误处理

    推荐的清理purge的方法 gt purge binary logs to mybin log000001 半同步复制 主库产生binlog到主库的binlog file 传到从库中继日志 然后从库应用 即 传输是异步的 应用也是异步的 半