mysql插⼊数据时设置id_Mysql数据库中,设置id为⾃动增
加,向数据库中插⼊数据时。。。
随着 MySQL 8.0.16 的发布,我们为 MGR 添加了⼀些功能,以增强其⾼可⽤性。其中⼀个功能是能够在某些情况下启⽤已离开组的成员⾃动重新加⼊,⽽⽆需⽤户⼲预。
为了理解这个功能的好处以及如何使⽤它,我们将快速查看它背后的概念以及它⾸先存在的动机。
介绍
MGR 允许 MySQL ⽤户轻松管理⾼可⽤组,并完成保证系统⾼可⽤所需的所有特征,例如容错或故障检测。
MGR 中提供的基本保证之⼀是该组呈现给⽤户的是⼀个不可分割的整体,这意味着⼀旦成员加⼊或离开该组,该更改将⽴即被其他成员得知。默认情况下,组内的数据本⾝最终是⼀致的,尽管可以被修改。为了实现这种保证,MGR 使⽤组成员服务,以及通过⼀致性算法检测有冲突的事务并中⽌它们。MGR 的这⼀⽅⾯超出了本⽂的范围,与成员⾃动重新加⼊功能并不完全相关,本⽂不作赘述。
组内新成员必须符合⼀些条件。其中新成员需要在事务⽅⾯赶上组进度(是通过选择组内⼀个成员来将已
处理的事务流式传输给他,在 MGR 中称为“捐赠”)。最后,只要在此“分布式恢”过程中没有遇到任何错误,组内新成员将被声明为 ONLINE 状态。
MGR 依靠组通信层 (GCS) 来管理组。该层实现了⽤于解决冲突事务的⼀致性算法,并强执⾏⼀些通信特性。对于实现前⾯提到的组的不可分割视图,这些特性⾄关重要,如消息的总顺序、安全传递或视图同步等。
GCS 需要能够检测组中哪些成员失效或看起来失效。⼀旦这些成员被检测为失效,就将其从该组中移除,以便保持该组正常使⽤。为此GCS 在每个成员中引⼊了⼀个故障检测器,⽤于分析组内交换的消息。如果它在⼀段时间内没有收到来⾃指定成员的消息,则故障检测器将对该成员产⽣“怀疑”,并认为该成员可能已经失效。成员从“怀疑”到真正失效的等待时间是可以配置的。
重新加⼊成员存在的问题
我们已经了解 MGR 必须为了⾼可⽤提供的策略,以及它如何实现,接下来请看⽰例:
⼀个⼩组由三个成员组成,其中⼀个成员偶尔会遇到丢失数据包、断连或者其它导致⽆法解决的错误情况的影响组内通信。还要考虑这些错误持续时间超过 group_replication_member_expel_timeout的值。
其中⼀个组员发⽣故障,⼩组的其他成员将决定踢出该成员。问题是,⼀旦该成员重新⼊组,他将被组驱逐加⼊失败,需要通过⼿动⼲预。
如果该成员的驱逐超时属性设置不为 0,则它将在被驱逐前等待满⾜该时间量(将超时设置为 0 意味着他将永远等待)。超时后成员将被驱逐并重新建⽴连接,并且⽆法重新加⼊旧组,需要再次⼿动⼲预。
于此,当存在⽹络故障时,显然需要⼿动⼲预。thinkphp开发流程入门
在 MySQL 8.0.16 中,我们引⼊了⾃动重新加⼊组的功能,⼀旦成员被驱逐出组,它就会⾃动尝试重新加⼊该组,直到达到预设的次数为⽌。有时每次重试之间⾄少等待5分钟。
如何启动⾃动重新加⼊?
可以通过将group_replication_autorejoin_tries设置为所需的重试次数来开启并使⽤⾃动重新加⼊功能。
SET GLOBAL group_replication_autorejoin_tries = 3
默认值为 0,表⽰服务器禁⽤⾃动重新加⼊。
如何验证⾃动重新加⼊?
与 MySQL 中的许多功能⼀样,⾃动重新加⼊过程是可以监测的。⾃动重新加⼊的可检测性依赖于性能模式基础架构,阶段式收集有关数据。
他们获取以下信息:
事件发⽣的线程ID(THREAD_ID)
活动名称(EVENT_NAME)
盐酸舍曲林片的副作用起⽌时间戳以及事件的总持续时间(TIMER_START,TIMER_END 和 TIMER_WAIT)
css怎么让图片居中显示在事件停⽌之前完成的⼯作单位和预估⼯作单位(WORK_COMPLETED,WORK_ESTIMATED)
因此,当⾃动重新加⼊过程开始时,它将在performance schema中注册⼀个名为“stage / grouprpl / Undergoing auto-rejoinprocedure”的事件。使⽤表
performance_schema.events_stage_current, performance_schema.events_stages_summary_global_by_event_name和performance_schema.events_stages_history_long我们可以观察到以下内容:
是否正在进⾏⾃动重新加⼊程序
到⽬前为⽌,已经减少重试的次数
直到下⼀次重试的估计剩余时间
⾃动重新加⼊过程状态
可以通过过滤包含“auto-rejoin”字符串的活动事件来查⾃动重新加⼊过程状态(即,是否正在进⾏):
SELECT COUNT(*) FROM performance_schema.events_stages_current
html中的name属性WHERE EVENT_NAME LIKE '%auto-rejoin%';
COUNT(*)
1
查询结果存在,证明服务器上运⾏了⾃动重新加⼊过程。
到⽬前为⽌的重试次数mysql无法连接到服务器
如果正在进⾏⾃动重新加⼊程序,我们可以通过选择阶段事件上的⼯作单元数来检查到⽬前为⽌尝试的重试次数:51单片机仿真软件手机版
SELECT WORK_COMPLETED FROM performance_schema.events_stages_current WHERE
EVENT_NAME LIKE '%auto-rejoin%';
WORK_COMPLETED
1
在这个例⼦中,到⽬前为⽌只有⼀次尝试。
预计到下次重试的剩余时间
在每次重新加⼊尝试之间,服务器将处于 5 分钟的可中断睡眠中。 重新加⼊尝试直到成功或失败之间的时间是⽆法估计的。 因此,为了粗略估计剩余时间,我们可以将到⽬前为⽌尝试的重试次数乘以 5 分钟,并减去到⽬前为⽌的阶段事件所花费的时间,以估计我们还需要多长时间:
SELECT (300.0 - ((TIMER_WAIT*10e-12) - 300.0 * num_retries)) AS time_remaining FROM
(SELECT COUNT(*) - 1 AS num_retries FROM
performance_schema.events_stages_current WHERE EVENT_NAME LIKE '%auto-rejoin%') AS T,
performance_schema.events_stages_current WHERE EVENT_NAME LIKE '%auto-rejoin%';
time_remaining
30.0
所以在这个例⼦中,在下⼀次重新加⼊之前还有 30 秒。注意性能模式表中的所有时间记帐都以微秒精度保持,因此我们将 TIMER_WAIT 缩放为秒。
使⽤⾃动重新加⼊与驱逐超时的权衡
到⽬前为⽌,在这篇⽂章中我们只关注⾃动重新加⼊。实际上,有两种不同的⽅法可以实现离开组的成员的重新加⼊:
设置⾃动重新加⼊尝试次数来实现⾃动重新加⼊
设置该成员的驱逐超时时间然后配合⼿动⼲预
能有延缓删除组内可疑成员,并且如果配置为⾜够长的驱逐超时时间,则增加了重新建⽴连接的机会,再次与组进⾏交互。
虽然这两个功能实现了相同的⽬标,但它们的⼯作⽅式是不同的,并且需要权衡。通过使⽤驱逐超时,您可以维护组中可疑的成员,其缺点是您⽆法添加或删除成员或选择新的主机。如果通过使⽤⾃动重新加⼊,该成员将不再是该组的正常组员,将保持在 superreadonly 模式,直到重新加⼊该组。但在此期间,重新加⼊成员的同步旧数据的可能性将增加。⾃动重新加⼊过程可监控,⽽驱逐超时不是真正可监控的。
所以,总结⼀下:
驱逐超时的优点
- 该成员⼀直在该组内
- 可能更适合⾜够⼩的⽹络故障
驱逐超时的缺点
- 在怀疑某个成员时,⽆法在该组上添加/删除成员
- 在怀疑某个成员时,⽆法选择新的主机
- 您⽆法监控此过程
⾃动重新加⼊的优点
- 该组将在没有重新加⼊成员的情况下运⾏,您可以添加/删除成员并选择新的主机
- 您可以监控该过程
⾃动重新加⼊的缺点
- 您增加了重新加⼊成员上过时读取的可能性
- 可能不适合⾜够⼩的⽹络故障
总⽽⾔之,我从启⽤⾃动重新加⼊中获得了什么?
通过启⽤⾃动重新加⼊,您可以减少对MySQL实例的⼿动⼲预的需要。您的系统
更加适应瞬间⽹络故障,同时满⾜对容错性和⾼可⽤的保证。
摘要
我们引⼊了⼀个名为group_replication_autorejoin_tries的新系统变量,允许⽤户设置 MGR 成员在被驱逐或与组的⼤多数⼈失去联系后尝试重新加⼊组的次数。
默认情况下,此⾃动重新加⼊过程处于关闭状态。它能帮助⽤户在⾯对瞬间⽹络故障时避免对 MGR 成员进⾏⼿动⼲预。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论