MySQL部分表复制配置下存在的运维风险、原因及一种方案

  大家都知道 replicate-wild-do-table可以配置只同步部分表,由于其支持通佩符,带来便利。但也存在一些风险。

 

    问题描述:

    假设M、S两个MySQL Server, S设置为M的从库,且设置replicate-wild-do-table=test.a%.

    此时在M库按照如下顺序操作:

1)      create table a1(f int);

2)      alter table a1 rename to b1;

3)      alter table b1 rename to a1;

    此时分别在M、S中show tables发现,M中有a1, S中只有b1.

    原因是步骤3没有在S中重放。

 

    相关代码:

    在主从过程中,从库S会将主库的所有命令都写入本地日志,但在执行之前会先判断是否符合replicate[-wild]-do-table的条件。

    从库判断表名是否符合同步条件则是在rpl_filter.cc:tables_ok中,判断的输入是thd.lex.query_tables。 而对于alter语句,在解析过程中仅将源表信息放入query_tables中,导致在执行步骤3时,判断b1不符合模式a%, 因此不予重放。

 

    换个策略也不行:

    第一反应是是否可以对于alter语句将目标表也放入tables_ok中判断?当然可以,但就算改成这个策略,仍不能解决这个问题。可以看看这个操作序列。

1)       create table a1(f int);

2)      alter table a1 rename to b1;

3)      alter table b1 rename to c1;

4)      alter table c1 rename to a1;

    可以看到就算是新策略,步骤3在S中仍然无法重放,在M执行步骤4的时候,S上仍会报错(c1不存在)

 

    运维风险:

    因此这个不算MySQL的bug,但在我们平时使用时却存在风险:我们在在线DDL的时候,经常会把一个表先转储到一个临时表中,在临时表中做完擦作后再替换原表。若此时从库上用replicate-wild-do-table作了限制,而临时表又不符合这个条件,则当主库在将临时表替换原表的时候,会导致从库上不会执行此操作,造成不一致。

    当然如果我们足够小心,使用一个符合条件的表名作临时表就没这问题了,关键是:这个是要靠人小心来保证,不保险----ddl之前还要去确认所有从库上的配置,也挺麻烦。

 

    一个方案:

    出现此问题的最根本原因,是在S上执行步骤2时,将表名从符合a%条件的a1改成b1,导致之后的不可逆。

    因此可以在从库上增加一个配置,是否允许重放这种命令。

    只需要在判断是否重放的位置,增加判断目标表名是否符合replilcate-wild-do-table的条件,若不符合,直接返回执行失败。并报错到Last_error中。

    剩下的就是配合监控了。监控后就可以按照需要重新处理,如需要让S继续重放以免M重新操作,则在S中把临时表的文件名也加入replicate-wild-do-table即可。

【数据库设计 MySQL】MySql主从复制过程,延迟原因,怎么解决 MySQL主从延迟是指主数据库上的更新操作传输到从数据库并被执行的时间差。通过这些措施,可以有效减少MySQL主从延迟,确保数据的实时性和一致性。 阅读详情

相关推荐

双重麻烦 - MySQL 双主复制的核心挑战

在上一篇博客中,我们看到了 MySQL 双主复制架构带来的诱人前景:高可用性、读取扩展能力,以及看似更平滑的故障切换与恢复。它描绘了一幅“双活”的美好画面。然而,正如许多看似完美的技术方案一样,双主架构的光环之下,隐藏着一系列棘手的、甚至可以说是危险的挑战。这一篇,我们就来直面双主架构的“阴暗面”,看看那些让许多 DBA 和架构师“望而却步”的核心问题究竟是什么。

weixin_42587823的博客 1057

mysql下存在的风险_MySQL部分表复制配置下存在的运维风险、原因及一种方案

大家都知道replicate-wild-do-table可以配置只同步部分表,由于其支持通佩符,带来便利。但也存在一些风险。问题描述:假设M、S两个MySQLServer, S设置为M的从库,且设置replicate-wild-do-table=test.a%.此时在M库按照如下顺序操作:1)create table a1(f int);2)alter table a1...

weixin_34023576的博客 236

MySQL之复制拓扑扩展与功能定制实战指南

大家好!在数据库架构设计中,复制拓扑的灵活性和功能定制能力是应对复杂业务需求的关键。写作本文的初衷,是希望与各位开发者、运维人员分享MySQL复制拓扑的扩展方案(如金字塔形拓扑、选择性复制)及功能定制技巧,通过通俗解析和实战案例,帮助大家构建适应业务特性的高效复制系统。文中将结合拓扑特点、配置代码和适用场景,助力读者掌握复杂复制架构的设计与优化思路。欢迎随时交流探讨!

wj_rdk的博客 1534

MySQL半同步复制原理配置与介绍

环境介绍:Ubuntu Server 16.04.2+MySQL 5.7.17 Community Server (GPL)MySQL安装通过APT的方式安装,官方指导文档地址: https://dev.mysql.com/downloads/repo/apt/1、下载mysql-apt-config_0.8.3-1_all.deb2、安装debA Quick Guide to Using t

徐刘根的博客 1万+

MySQL之复制容量规划与监控维护实战指南

大家好!在MySQL复制系统的设计与运维中,容量规划与监控维护是保障系统稳定运行的关键环节。写作本文的初衷,是希望与各位开发者、运维人员分享复制架构的容量评估方法、瓶颈分析技巧及监控实践,通过通俗解析和实战案例,帮助大家构建具有弹性扩展能力的复制体系。文中将结合容量计算、瓶颈定位和监控工具使用,助力读者掌握复制系统的全生命周期管理要点。欢迎随时交流探讨!

wj_rdk的博客 1579

基于高精度三维机器视觉的新能源汽车锂电池表面缺陷检测

在机器视觉行业迅速发展的背景下,市场上提供了功能强大且种类齐全的3D相机系列,可以满足锂电池从电芯到模组各个工艺和工位的3D检测需求。

Hinyeung_Limited的博客 1133

mysql数据库复制数据表时的风险

最近在使用redis的缓存技术时,在项目中需要在插入mysql数据表记录的同时,缓存数据到redis。在创建数据表时,为了方便,直接使用复制另外一个数据库中的数据表,结果就悲剧了 package com.springboot.chapter7.service.impl; import java.util.List; import org.springframework.beans.fact...

小蜜蜂1010的博客 798

真双口RAM---Quartus与Vivado开发环境区别对比

2、写和写冲突:表示两个端口写使能同时有效且写地址相同,此时需要关断一个写,把两个写端口都需要更新的值处理到一个写端口上面,任何的DP RAM 都不支持写和写冲突。以上述直方图统计使用为例,博主在仿真过程中发现,vivado真双口RAM--B端口读写延迟2个clk;1、读和写冲突:如果读和写同时有效,且读和写是同一个地址时,发生RAM读写冲突,此时会把最新的写数据直接赋给读数据,称为写穿通到读。

weixin_54470733的博客 3583

MySQL运维28-MySQL复制

MySQL运维28-MySQL复制

日拱一卒的博客 909

uniapp+uniCloud实现微信小程序一键登录

(用户唯一标识),用户登录成功后,开发者服务器可以将openid和session_key保存,生成一个自定义登录态的token令牌响应给微信小程序,通过token可以查询openid和session_key,小程序下次请求只要携带着token就可以证明已经登录。这个API就是获取用户信息,每次请求都会弹出授权窗口(这个可能会不弹,这个要看你的版本,根据版本来定,不懂的可以留下评论),用户同意后会返回。到这里就可以实现微信一键登录了,快去试试吧,有问题可以在评论区留言,我看见会尽我知道的为你解答。

lb2917的博客 2577

nrf52840的uart0与uart1双串口使用

nrf52840的uart0与uart1双串口使用 项目原使用nrf52832,后面由于项目需要用到双串口,改用nrf52840,官方的例程没看到使用uart1的,找遍全网都没找到uart1的使用资料,有些不负责任的网文居然说40也只有一个uart,吓得俺赶紧又查看了一次datesheet,O得K、木鸭梨 SDK代码uart驱动中,搜索到uart1的驱动部分,说明官方驱动有uart1支持的 自己动手,丰衣足食吧,下面以nRF5_SDK_17.0.0_9d13099版本,在examples\ble_per

chhen168的博客 5626

jira 此 mysql 实例没有适当配置_当前MySQL只读实例方案及存在的问题

笔者在工作中申请了几篇技术专利,主要是在MySQL学习和使用过程中的一些方案优化。计划将交底书中的“当前方案和问题”章节的内容作为一个系列在专栏中记录。本文是这个系列的第一篇,交底书原名“一种基于数据延迟智能控制的MySQL读写分离实现方案”,但申请过技术专利的同学都知道,被专利代理人更改过的专利名称已经跟交底书中的名称相去甚远。 〇. 缩略语和关键术语定义主实例/源实例:提供读写服务的数据库实...

weixin_42367464的博客 1687

stm32 Can通讯过滤器寄存器设置(实验验证)

起因:在使用stm32单片机can通讯时,参考手册的介绍与寄存器封装有差别,不好理解怎么去设置寄存器。在参考一些代码时,对怎么去设置过滤器还是难以理解。 解决: 在寄存器封装库中,我们发现CAN过滤器设置寄存器封装有CAN1->sFilterRegister[ x ].FR1 和 CAN1->sFilterRegister[ x ].FR2 两个寄存器,其封装如下:type

u013984214的专栏 3289

【MySQL进阶·运维与架构】8.7 延迟复制

MySQL的延迟复制功能为特定应用场景提供了灵活的数据同步策略。通过合理配置和使用延迟复制,可以在保持数据一致性的同时满足非实时性需求或应对特定的业务需求。然而,在实际应用中需要注意其局限性和潜在风险,并采取相应的监控、告警和优化措施来确保数据的安全性和可靠性。随着技术的不断发展和完善,相信延迟复制功能将在未来得到更广泛的应用和优化。👨‍💻博主Python老吕评论,您的举手之劳将对我提供了无限的写作动力!🤞🔥《Python全栈工程师》《Python游戏开发实战讲解》《Python Web开发实战》

Python老吕的博客 1075

AMEsim不连续处理机制:仿真精度与效率的平衡艺术

本文深入解析AMEsim不连续处理机制在系统仿真中的应用,探讨如何平衡仿真精度与效率。通过液压系统仿真案例,详细介绍了事件检测算法、变步长求解器自适应策略及典型场景优化方法,帮助工程师有效应对仿真中的不连续性问题,提升仿真效率和准确性。

v4w5x6的博客 442

Vue3 - Element Plus 表格组件 el-table “表格行数据中又嵌套了二维对象数组“,按平级循环渲染(嵌套数组视为同级行数据), 对嵌套的数组循环展示为表格,智能合并行或列详细教程

vue3,nuxt3,element-plus,table表格组件,el-table,vue3element表格组件,数据中有二维数组怎么遍历循环显示,表格数据带二级数组怎么循环渲染显示,表格数据中存在一个数组要怎么才能显示到表格,el-table表格合并详细教程示例,table表格如果对象里面还有对象数组那该怎么去渲染,平常都是数组中一个对象渲染成一行,每行中还有嵌套数组怎么办,每个行数据下还有一个数组怎么显示,怎么把表格相同的数据合并为一行,合并上下两行相同数据单元格,合并行或列如果遇到相同单元格就合

🏆 前端领域优质创作者 1万+

深入解析MySQL主从延迟与各版本并行复制优化方案

在 MySQL 数据库的主从架构中,主从延迟是运维人员经常面临的核心问题之一。主从延迟不仅会影响数据一致性,还可能导致业务查询结果偏差。本文将从主从延迟的根本原因入手,深入分析多线程复制的设计思路,并详细讲解 MySQL 5.6、5.7 及 5.7.22 + 版本中并行复制的实现方案与配置方法,为大家提供一套完整的主从同步优化指南。

专注Java和MySQL领域知识分享 861

ZYNQ 使用AXI_BRAM实现PS与PL 数据交互数据交互

有时CPU需要与PL进行小批量的数据交换,可以通过Block RAM实现。通过Zynq 的GP Master 接口读写PL端的 BRAM,实现PS与PL的交互。加入自定义的 FPGA 程序,并利用 AXI4 总线进行配置,通知何时读写 BRAM。CPU通过 AXI BRAM Controller 读取 BRAM 数据,CPU 仅配置自定义的 PL BRAM Controller 的寄存器,不通过它读写数将BRAM与socket进行联合使用,将电脑的数据发到PS端,PS端放在PL端,PL端再发给PS端,P据。

wangjie36的博客 1万+

MySQL 集群方案讲解

MySQL 集群方案讲解

闲余知道 1665

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

如何优化MySQL主从复制的性能?

如何优化MySQL主从复制的性能?

深山技术宅的博客 1452

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

MySQL复制(四)异步复制之GTID

背景MySQL 任何复制方式都是基于 binlog 方式进行的。从 MySQL5.6 开始增加了特性,作为方式的延伸,用来强化数据库的主备一致性,故障恢复,以及容错能力。以取代过去传统的主从复制 (即:基于和的异步复制)。借助,在发生主备切换的情况下,MySQL 的其他 slave 可以自动在新主上找到正确的复制位置,这大大简化了复杂复制拓扑下集群的维护,也减少了人为设置复制发生误操作的风险。另外,基于的复制可以忽略已经执行过的事务,减少了数据发生不一致的风险。MySQL复制中使用的事务类型有以下两种:GT

一介IT 593

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

mysql运维, 日志

MySQL 使用二进制格式存储 binlog 主要是为了提高性能、节省存储空间、确保日志的一致性与可靠性,同时也为复制、恢复和灾难恢复等关键任务提供了高效的支持。这种设计能有效提升 MySQL 数据库在大规模生产环境下的运行效率。grepheadtail等工具组合使用,可以非常方便地从命令行处理和分析大量文本数据。通过这些命令,你可以高效地筛选、查找、查看并处理文本内容,提高工作效率,尤其是在处理日志文件或大文件时。

qq_41577703的博客 837

MySQL 同步复制及高可用方案总结

点击上方“民工哥技术之路”选择“星标”每天10点为你分享不一样的干货1.前言mysql作为应用程序的数据存储服务,要实现mysql数据库的高可用。必然要使用的技术就是数...

民工哥的博客 753

MySQL主从复制全攻略

本文深入探讨了MySQL主从复制的机制,详细解析了其工作原理:主服务器接收客户端更新后,将更改记录到二进制日志中,从服务器通过I/O线程读取这些日志并保存至本地的中继日志,SQL线程再从中继日志读取事件并在从服务器上重放,以此实现数据同步。文中还介绍了配置主从复制的具体步骤,包括确保两台服务器时间同步、创建用于复制的MySQL用户、设置主服务器配置参数、导出主服务器数据库快照等。

Linux内核研究者 1260

mysql主从复制与读写分离

MHA(全称Master High Availability或MySQL High Availability)是一个用于提高MySQL数据库高可用性的解决方案。它通过在主数据库和备份数据库之间进行故障切换,确保在主数据库出现故障时,系统能够自动切换到备份数据库,从而保证系统的持续运行。

weixin_73188318的博客 1068
上一篇: MySQL源码学习:MySQL中禁止跨库访问的实现
下一篇: MySQL小误区:关于set global sql_slave_skip_counter=N 命令的一些点
iteye_621
博客等级 码龄8年 12粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值