`
丁林.tb
  • 浏览: 797527 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多

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

 

    问题描述:

    假设MS两个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;

    此时分别在MSshow 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;

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

 

    运维风险:

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

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

 

    一个方案:

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

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

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

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

3
1
分享到:
评论
1 楼 cfanbo 2011-10-22  
这样看的话,确实是一个问题。同时设置两个临时表名是可以解决的。

相关推荐

    运维和mysql重点面试题总结详细总结

    7. **MySQL主从复制**:主从复制是MySQL数据库的一种高可用解决方案,主库的数据更改会同步到从库,确保数据一致性。如果主库出现故障,可以从库接管服务。 8. **Memcached工作原理**:Memcached是一种分布式内存...

    MySQL5.6replicate容灾方案[参照].pdf

    MySQL 5.6 Replicate容灾方案是一种在数据库层面实现高可用性和灾难恢复的技术,它通过复制数据库中的事务来保持多个实例之间的数据一致性。本文将详细介绍MySQL 5.6版本的复制功能,包括其原理、架构、安装配置、...

    MHA-MySQL DBA运维部署手册包含离线安装文件

    MySQL数据库是广泛应用于互联网行业的关系型数据库管理系统,而MHA(Master High Availability)则是针对MySQL主从复制架构的一种高可用性解决方案。MHA主要用于在主库出现故障时,能够快速无损地切换到备用服务器,...

    mysql数据库高可用性方案.doc

    MySQL复制是一种常见的高可用性解决方案,它允许数据从一个主服务器(Master)实时同步到一个或多个从服务器(Slaves)。当主服务器出现问题时,可以手动或自动将流量切换到从服务器。优点包括易于实施、成本低和...

    mysql-mmm高可用

    MySQL-MM(Master-Master Replication Manager)是一种针对MySQL数据库实现主主复制的高可用解决方案,旨在提供读写分离和故障切换的能力。MySQL-MM是社区维护的开源项目,它通过一个中间件来管理多个MySQL主主复制...

    一种基于binlog的可配置的mysql数据库实时同步方法.pdf

    MySQL的binlog是一种记录数据库所有更改操作的日志系统,它被广泛用于数据恢复和复制。本发明的核心在于利用binlog的动作事件触发机制,将用户的配置操作、系统影响的数据库更改以及与底层系统的交互动作实时地在...

    Linux下Mysql双机备份

    尽管MySQL不支持增量备份,但提供了另一种解决方案——主从备份机制,允许将主数据库的数据实时同步到备份数据库中,从而实现热备份。 #### 版本需求 为了实施双机热备,需要满足以下版本要求: - MySQL版本必须...

    运维趋势 第十四期 高性能电子商务网站

    其中包括了一种MySQL主从同步加速方案,通过对MySQL复制过程的优化,可以显著提高数据同步速度,进而提升系统的整体性能。另外,还讨论了如何实现电子商务网站的自动备份功能,以应对可能的数据丢失风险。 #### ...

    MySQL自动化部署的设计方案.docx

    因此,探索一种高效、稳定的MySQL自动化部署方案变得尤为重要。 #### 二、安装部署步骤梳理及常见问题 **1. 安装部署步骤梳理** 针对MySQL的自动化部署,首先要明确部署过程中可能遇到的问题和不规范之处。从流程...

    mysql数据库备份和恢复工具

    3. MySQL Enterprise Backup(MEB):MySQL的商业版本提供的一种高级备份解决方案,支持在线备份、热备份、增量备份等功能。 四、MySQL恢复过程 1. 使用mysqldump恢复:通过`mysql -u username -p password ...

    实战基于MHA方式实现MySQL高可用

    MHA为MySQL高可用提供了一种有效解决方案,通过自动化处理故障转移,降低了运维复杂度。然而,使用MHA的同时,也要注意其可能存在的风险,如数据不一致、网络延迟等,因此,合理规划和严谨的运维实践是保证高可用性...

    整理下Mysql集群的的一些资料

    MySQL集群是一种高可用性和高性能的数据库解决方案,它通过分布式数据存储和处理来提供服务。在MySQL集群中,数据被分散到多个节点上,每个节点都包含数据的一部分,并且可以处理来自客户端的查询请求。这样的设计...

    MYSQL数据库

    MySQL数据库是一种广泛使用的开源关系型数据库管理系统,由Oracle公司维护,以其高效、稳定和易于管理的特点,成为许多企业和开发者首选的数据库解决方案。本篇将深入探讨MySQL的核心知识点,包括其设计原理、性能...

    Zabbix监控MySQL的模板.zip

    而MySQL则是一种广泛使用的开源关系型数据库管理系统,它在各种规模的企业中都有应用。将Zabbix与MySQL结合,可以实现对MySQL数据库的高效监控,确保数据安全和系统稳定运行。"Zabbix监控MySQL的模板.zip"文件正是...

    mysql高可用资料

    DRBD是一种分布式存储系统,它可以实时同步数据到多个节点,从而提供数据冗余。在MySQL环境中,DRBD可以在主服务器和备服务器之间实时复制数据块,当主服务器出现故障时,备服务器可以立即接管,实现几乎无中断的...

    Mysql_如何进行性能优化教程

    B树是一种自平衡的树结构,每个节点可以拥有多个子节点,这使得B树能够有效地利用磁盘空间,并且能够在O(log n)的时间复杂度内完成插入、删除和查找操作。 - **Hash索引**:对于内存表等特定类型的表,MySQL也会使用...

    阿里云-MySQL云数据库快速入门.pdf

    此外,RDS支持MyISAM、InnoDB和TokuDB存储引擎,但不推荐使用MyISAM,因为存在表损坏的风险,同时不支持Memory引擎。对于MySQL主备复制,RDS已经自动配置,用户无需手动操作。 在RDS管理控制台上,用户可以进行实例...

    mysql-cluster-installer-master_oracle_install_quicklyvi1_mysqlcl

    MySQL Cluster是一种高可用、高性能的数据库解决方案,由Oracle公司提供,它支持实时应用程序,并具有数据复制和分区功能。Oracle MySQL Installer则是为了简化MySQL及其相关组件(如MySQL Cluster)的安装过程而...

    MySQL面试教程-MySQL数据库面试必备视频教程

    ### 一、MySQL版本类问题 在面试过程中,面试官经常会询问关于MySQL不同版本之间的差异,以及这些差异如何影响实际的应用场景。例如,MySQL 5.7 和 MySQL 8.0 之间在性能、特性支持等方面的不同之处。理解这些版本...

Global site tag (gtag.js) - Google Analytics