MySql-JDBC故障转移

2023-10-28

MySQL Connector/J 支持故障转移,故障转移在潜在的风险要发生的时候使用,通常情况下,数据库连接发生错误,需要客户端的异常处理(重新创建Statement、ResultSet、重启进程),而使用Mysql Replication-Driver能够实现自动故障转移,当一个库发生宕机,将连接连到其他存活的库上,来实现主从高可用。

使用者只需像使用普通jdbc连接一样,就可以在故障发生时,无感知的实现故障转移,配置故障转移的jdbc URL如下:

jdbc:mysql://[primary host][:port],[secondary host 1][:port][,[secondary host 2][:port]]...[/[database]]»
[?propertyName1=propertyValue1[&propertyName2=propertyValue2]...]

在这个URL中包含两种主机,主库Master和从库Slave。

  • 主库宕机,从库可读
  • 从库宕机,主库可写,另一台从库可读
  • readFromMaster=true,情况下,主库也可读

故障转移由以下连接属性支持:

  • failOverReadOnly
  • secondsBeforeRetryMaster
  • queriesBeforeRetryMaster
  • retriesAllDown
  • autoReconnect
  • autoReconnectForPools

配置连接模式

在一些标准连接里,主节点的初始化连接是可读可写的。然而,如果驱动确定到主节点的连接失败,将会自动切换到列表中的下一个节点,连接模式依赖于failOverReadOnly这个属性,默认是true,相似的,从节点的连接失败,主节点也会变成可读,可写的,不管主节点之前是否被连接过,连接的模式都可以通过调用connection.setReadOnly()方法进行改变(实际重写了failOverReadOnly),

  • 情况A:FailOverReadOnly=true
    a.到主节点的连接是可读、可写
    b.设置主节点readOnly属性是true,主节点是只读模式
    c.FailOver事件发生;连接到从节点是只读模式
    d.设置readOnly=false,到第二个节点的连接是只读
    e.主节点恢复后,主节点是可读、可写的

  • 情况B:FailOverReadOnly=false
    a.连接到主节点是可读、可写的
    b.设置主节点readOnly属性是true,主节点是只读模式
    c.FailOver事件发生;连接到从节点是只读模式
    d.设置readOnly=false,到第二个节点的连接是可读、可写
    e.主节点恢复后,主节点是可读、可写的

区别在于第四部,FailOver发生时,情况A第二个节点的读写模式不变,主节点不可用,直到主节点恢复前,整个集群只读;情况B立刻切换成第二个节点,可读、可写

配置恢复主节点

像之前提到过的,主节点在FailOver机制中是特别的,驱动默认希望尽快的恢复主节点,即便没有连接异常发生,两个属性,secondsBeforeRetryMaster和queriesBeforeRetryMaster决定了什么时候重试到主节点的连接

  • secondsBeforeRetryMaster 决定了尝试连接到主节点前等多长时间
  • queriesBeforeRetryMaster 决定了驱动尝试连接到主节点前,执行查询的数量。每次执行Statement.execute*(),查询计数器+1,因此,当Statement.executeBatch() 或 allowMultiQueries 或 rewriteBatchStatements 可用时,查询计数器是不准确的,这意味着,queriesBeforeRetryMaster只是一个粗略计算的参数。

通常情况下,尝试到主节点的连接检查,只有在上述两个条件满足下才会进行,并且尝试总是发生在事务的界限内,如果将autoCommit关闭了,这个检查只会发生在Connection.commit() 或 Connection.rollback()调用时。如果同时设置secondsBeforeRetryMaster 和 queriesBeforeRetryMaster 为 “0”,自动恢复主节点将会被关闭,设置其中一个为0,只会禁用部分检查。

配置重连

当确定一个新的连接,或者FailOver发生的时候,驱动尝试连续的连接候选主机(Slaves几点),最后一个节点尝试完,再从第一个节点开始尝试。当 a)并非所有的次节点至少尝试一个重试连接 b)通过secondsBeforeRetryMaster 和queriesBeforeRetryMaster条件定义的连接重试不满足条件时,主节点的重试连接将会被跳过。整个主机列表(不一定在主机列表的末尾完成)的连接重试,计为一次重试连接,一共尝试retriesAllDown次(默认120)

无缝重连

尽管不建议,你可以使驱动在执行failover时,不作废通过设置 autoReconnect 或 autoReconnectForPools 为 true所产生的Statement和ResultSet ,这要求客户端在failover后继续使用相同的实例,不采取任何异常措施,这将会造成意想不到的后果,例如:如果驱动通过读/写模式连接到主节点,并且他failover到一个只读的从节点,这时候写请求将会报错,而且客户端没法感知,这种限制在使用数据流时特别相关,在failover后,resultSet看起来很正常,但潜在的连接可能已经改变了,并且再也没有回退方案了。

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

MySql-JDBC故障转移 的相关文章

  • 账户系统db服务器为创建快照,Mysql 服务器同步(replication)设置.docx

    Mysql 服务器同步 replication 设置 Mysql 服务器同步 replication 设置MySQL支持单向 异步复制 xff0c 复制过程中一个服务器充当主服务器 xff0c 而一个或多个其它服务器充当从服务器 主服务器将
  • 安全禁用从属服务器上的 MySQL 复制:最佳实践和注意事项

    MySQL 复制是一种在主服务器和一个或多个从服务器之间同步数据的流行方法 它确保高可用性 负载平衡和数据冗余 但是 在某些情况下 您可能需要暂时禁用从属服务器上的复制 例如在维护或故障排除期间 本文将介绍在从属服务器上安全禁用 MySQL
  • MySQL 是否可以实现 N-master => 1-slave 复制?

    我想制作一台专用的从机 用于三个不同服务器上三个数据库的数据复制 换句话说 我想做多主 gt 单从复制 有没有办法做到这一点 尽可能简单 Thanks MySQL 不支持多主复制 一个从站有多个主站 MySQL Cluster 除外 您可以
  • cassandra 分片和复制

    我是 Cassandra 的新手 不过本文解释分片和复制 我陷入了一个困境 我的本地计算机上配置了一个包含 6 个 Cassandra 节点的集群 我创建一个新的键空间 TestKeySpace 复制因子为 6 并在键空间 employee
  • 如何在复制过程中过滤数据并只向用户提供他自己的文档?

    我需要在客户端同步来自 CouchDB 和 PouchDB 的服务器数据 每个用户都有自己的数据 当他在线时 该数据正在更新 如何在复制过程中过滤数据并只向用户提供他自己的文档 这对我来说是安全问题 在您开始拥有大量用户 数千个 之前 为每
  • 如何在 MongoDb 中优先读取辅助节点

    在副本集配置中使用 mongodb 时 1 个仲裁器 1 个主节点 2 个从节点 如何设置对辅助节点执行读取操作并仅将主节点保留为写入的首选项 我正在使用 MongoDb 2 0 4 和 Morphia 我看到有一个slaveOk 方法 但
  • MySQL 二进制日志复制:可以设置为忽略错误吗?

    我正在运行一个主从 MySQL 二进制日志复制系统 唷 对于某些数据 该系统不同步 这意味着主服务器比从服务器保存更多的数据 但是从站经常因为最轻微的 MySQL 错误而停止 这可以禁用吗 可能是复制从站忽略复制错误或某些类似的 my cn
  • Cassandra数据复制问题

    我有一个 2 节点 cassandra 集群 复制因子为 2 并且 AutoBootStrap true 启动期间一切正常 两个节点都能看到对方 我们将这些节点称为 A 和 B 通过节点 A 将一组键和列 我们称之为 K1 添加到 cass
  • Hadoop 中的数据复制错误

    我正在我的机器上实现 Hadoop 单节点集群 方法如下迈克尔 诺尔的教程 http www michael noll com wiki Running Hadoop On Ubuntu Linux 28Single Node Cluste
  • 两个具有不同名称且具有不同列名称的表之间的复制。是否可以创建这样的复制

    我有一个要求 在两个具有不同名称且具有不同列名称的表之间创建复制 是否有可能创建这样的复制 server A server B Table Test Table SUBS columns A B C Co
  • 如何将数组复制到特定长度的数组

    我想将一个小数组复制到特定长度的数组 Example var 22 33 44 55 gt len var 4 n 13 我想要的新数组是 var new 22 33 44 55 22 33 44 55 22 33 44 55 22 这是我
  • 同一主机上的 2 个实例之间的 ehcache 自动发现(通过多播)

    我在同一主机上运行 2 个 tomcat 实例 每个实例都运行相同的 Web 应用程序 该应用程序尝试通过 RMI 复制与某些 ehcache 缓存进行通信 我在 ehcache 中使用自动发现配置 因此不必显式定义哪些是主机以及哪些是我想
  • 使用 PouchDB 过滤设计文档

    我正在使用设计文档来确保只有所有者才能修改文档 如何防止 couchdb 复制此设计文档 您可以使用过滤选项 http pouchdb com api html replication in changes and replicate e
  • solr ReplicationHandler - SnapPull 无法下载文件

    在从主服务器到从服务器的复制过程中 我们不断收到此异常 我们的索引大小是 9 7 G 我们正在尝试从头开始复制一个从站 2013 年 10 月 30 日 18 22 16 996 explicit fetchindex cmd 错误 Rep
  • SQL Server 2008 Express 无法用于合并复制?

    根据 Microsoft 的说法 SQL Server 2008 Express 应该能够作为拉取订阅者参与合并复制 至少对于 RMO 对象来说是这样 http msdn microsoft com en us library ms1478
  • 在不同数据库模式之间同步数据的最佳技术?

    我有一个现有的 SQL Server 2005 数据库 用于运行我们的会计 库存应用程序 我们正在考虑使用一个新的在线订购框架 它有自己的数据库 如果我们使用这个新框架 我们将需要几乎实时地将在线订购数据 库存 价格 订单 客户 传输到我们
  • Java 的去中心化集群库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 有人知道如何扩展 Amazon RDS 只读副本吗?

    我最近设置了一个只读副本 以减轻我的 Amazon 多可用区 RDS 实例的部分读取负载 亚马逊文档明确指出 由您的应用程序决定如何在只读副本之间分配读取流量 有人找到了一种可管理的方法来扩展只读副本吗 将我的应用程序的不同部分硬编码为从特
  • 有没有办法对 Neo4j 数据进行分片和复制?

    我正在考虑为我正在从事的一些新项目选择 Neo4j 对于给定的数据需求 本质上基于图形 neo4j 非常适合 并且快速原型为我提供了良好的响应时间 我想了解的是如何扩展 neo4j 部署 具体来说 如何跨 neo4j 部署对数据进行分片 由
  • 复制延迟 - 超过 max_slot_wal_keep_size,WAL 段未删除

    Summary 我们正在使用max slot wal keep size来自 PostgreSQL https www postgresql org docs current runtime config replication html1

随机推荐

  • [Unity 3D] 簡單瞭解「Collision碰撞」與「Trigger觸發」

    Unity 3D是套非常好用的遊戲開發引擎 內建的物理系統讓使用者不需寫長長的程式碼 就能夠迅速設定好所有物件之間的碰撞關係 做出讓角色走不過去的牆 或是可以射穿牆壁的子彈等等 不過它的設定相當細 若是分不清其中差異 很容易就會陷入鬼打牆的
  • IT新技术

    1 物联网 含义 指物物相连的互联网 关键技术 RFID技术 传感器技术等 应用 物流 智能交通 智能医疗 智能家居等 2 大数据 巨量资料 海量 高增长率和多样化的信息资产 特点 4v 大量 多样 高速 价值密度低 应用 金融行业 电商行
  • 《战狼》演习中到底是靠什么代码攻破对方的指挥系统?

    战狼 演习中到底是靠什么代码攻破对方的指挥系统 红蓝双方正在进行军事演习 开局 红方发动了手速buff 仅用时3秒 便成功入侵了对方了指挥网络 旗开得胜 接下来让我们好好学习一下这段代码 敲黑板 啊 这 C语言的气息 通过红框标注的prin
  • SpringSecurity的使用

    Spring Security 是针对Spring项目的安全框架 也是Spring Boot底层安全模 块默认的技术选型 他可以实现强大的Web安全控制 对于安全控制 我们仅需要 引入 spring boot starter securit
  • Slor 条件查询提示:org.apache.http.ParseException: Invalid content type:

    今天在编写Solr查询条件时 启动单元测试 solr 提示如下错误信息 Caused by org apache http ParseException Invalid content type at org apache http ent
  • Unity小游戏-勇闯小岛(PC) 项目展示+完整项目源码

    游戏录像 游戏玩法 主角可以变换四种状态 玩家通过四种状态特有的技能来击败眼前的怪物闯关 切换到棕色 有一个一直围绕自己旋转的大摆斧攻击敌人 切换到绿色 可以抵挡一切的投掷物 但是无法攻击敌人 切换到粉色 切换瞬间可以发出飞镖 切换到蓝色
  • ChatGPT全宇宙!开启联网解除封印,插件生态系统即将问世!

    OpenAI 冷不丁又宣布了惊爆全球的消息 ChatGPT 可以集成第三方插件了 封印解除后 ChatGPT 俨然已经迎来了属于自己的 全知全能 宇宙 网友直呼 AI 的 APP Store 时刻已来 今早醒来 全网都炸锅了 之前 大家都公
  • 硬盘的存储原理和内部架构

    首先 让我们看一下硬盘的发展史 1956年9月13日 IBM的IBM 350 RAMAC Random Access Method of Accounting and Control 是现代硬盘的雏形 整个硬盘需要50个直径为24英寸表面涂
  • String未声明标识符号

    String未声明标识符号 问题描述 原因 解决方法 整体结构为 主函数 头文件的引入 检测函数头文件 检测函数 问题描述 原因 定义的String为CV String 我们需要std string 解决方法 使用string 报错 str
  • Ubuntu16.04搭建fisco-bcos和webase中间件开发环境

    搭建fisco bcos和webase中间件开发环境 依赖安装 node环境搭建 webase中间件依赖配置 Java MySQL python mysql mysql安装 mysql配置test用户 不建议给root用户授权远程访问 搭建
  • 【SDG代码精读】More Control for Free! Image Synthesis with Semantic Diffusion Guidance【SDG】

    SDG代码精读 More Control for Free Image Synthesis with Semantic Diffusion Guidance SDG 1 首先看看这篇文章的主要贡献 2 主要代码的分析 1 主要的采样模块 2
  • nginx二级域名配置阿里云免费SSL证书浏览器提示不安全

    阿里云免费SSL证书 由图可知SSL证书只作用于 xxx top 与 www xxx top 一个主域名和一个子域名 如果你用nginx添加证书至 xxx xxx top 二级域名 则需要购买通配符证书
  • Java中的二维数组排序——多条件排序

    目录 重写Array sort 方法 使用lambda表达式重写Array sort 方法 重写Array sort 方法 输入的排序数组的形式为int 2 例如 int test 7 0 4 4 7 1 5 0 6 1 5 2 排序的逻辑
  • 打扮一下咱们的开发工具--更换IDEA主题

    当我们安装一个新的IDEA工具时 第一次进入时会提示我们选择一个themes 但是只有两个风格 如下图 我们可以选择自己喜欢的主题风格吗 当然是可以设置的啦 亲测按以下方式设置IntelliJ IDEA 和PyCharm 都可以 一 下载我
  • Android UI组件学习——AutoCompleteTextView

    Android UI组件学习 自动完成文本框 AutoCompleteTextView 的功能和用法 AutoCompleteTextView还派生了一个子类 MultiAutoCompleteTextView 该子类功能与AutoComp
  • 文件上传之upload-labs 1~5 详细介绍

    一 Pass 01 前端js验证 1 1 原理描述 在文件上传时 用户选择文件时 或者提交时 有些网站会对前端文件名进行验证 一般检测后缀名 是否为上传的格式 如果上传的格式不对 则弹出提示文字 此时数据包并没有提交到服务器 只是在客户端通
  • Mongoose中的查找

    使用Mongoose来查找文档很容易 有以下3种方法可供选择 find findById findOne 1 find 第一个参数表示查询条件 第二个参数用于控制返回的字段 第三个参数用于配置查询参数 第四个参数是回调函数 回调函数的形式为
  • 抖音快手最新版抓包模块免费送

    安装前 安装后 视频讲解 https www bilibili com video BV1Ga411Q7be p 10 vd source 43c2c404de6d798650d44c856ee1e992 下载地址也在视频评论区
  • YOLOv5源码逐行超详细注释与解读(3)——训练部分train.py

    前言 本篇文章主要是对YOLOv5项目的训练部分train py 通常这个文件主要是用来读取用户自己的数据集 加载模型并训练 文章代码逐行手打注释 每个模块都有对应讲解 一文帮你梳理整个代码逻辑 友情提示 全文近5万字 可以先点再慢慢看哦
  • MySql-JDBC故障转移

    MySQL Connector J 支持故障转移 故障转移在潜在的风险要发生的时候使用 通常情况下 数据库连接发生错误 需要客户端的异常处理 重新创建Statement ResultSet 重启进程 而使用Mysql Replication