Drop view 操作导致event被清空

01、报错概述

近日,在版本为8.6.2.33 R26 版本发现数据库存在系统误删event 问题。

02、分析思路

某天学习,其中一台主机由于硬件问题,主机数据库服务不正常。

在启动服务器后event恢复期间,发现停机节点有部分表分片丢失或者和备分片数据不一致问题。在此期间做的操作有创建表,删除表视图。但后续用到此表时发现分片数据不存在报错,或者主备分片数据不一致。

顺着操作思路有以下复现场景的方案:

1. 在集群正常的情况下create view 操作 (该表视图是存在的);

2. 模拟宕机,即服务状态不正常,offline或者是close .登录gn主机进行service gcware stop;

3. 宕机后delete 数据,使其产生event信息.再去删除event对应表的视图.发现event已被清除;

gccli -uroot

use test;

delete from test.test1;

drop view if exists test2.test1 ; #这个表dmlevent 直接被清空!!

use test2;

drop view if exists test2.test1 ; #这个表dmlevent 会被保留!!,主备节点数据一致

4. 机器恢复后,登录至gncli 进行count分片,发现模拟宕机节点主备分片数据不一致。

03

解决方案

鉴于当前的状况,有两个方法:

方法一:升级集群版本;

方法二: 如果不升级,可以在执行drop view if exists xxxx.test2语句前,用use xxxx进行数据库切换,可以避开这个问题。

本 文 原 创 来 源:IT那活儿微信公众号(上海新炬王翦团队)

发表评论

登录后才能评论
网站客服
网站客服
申请收录 侵权处理
分享本页
返回顶部