临时表的文件夹错误处理
表现或报错:
sql跑数据失败停止了,报错如下:
DETAIL: (GBA-01EX-700) Gbase general error: I/O operation on /data/gnode/userdata/gbase/gctmpdb/sys_tablespace/_tmp_rht_1234601226_20925900_t7154845_3_1658496202_s_n4/C00000.seg.1 failed with error - Not a directory, File name /data/gnode/userdata/gbase/gctmpdb/sys_tablespace/_tmp_rht_1234601226_20925900_t7154845_3_1658496202_s_n4/C00000.seg.1
gbase_errno:1709 returned_sqlstate:HY000 message_text:**.***.***.**:5050Failed to query in gnode:
DETAIL: Gbase database/table corrupted (gctmpdb._tmp_rht_1251378442_12617773_t3845504_2_1658496208_s_n2.1.118./data/gnode/userdata/gbase/gctmpdb/sys_tablespace/_tmp_rht_1251378442_12617773_t3845504_2_1658496208_s_n2/C00000.seg.1): I/O operation on /data/gnode/userdata/gbase/gctmpdb/sys_tablespace/_tmp_rht_1251378442_12617773_t3845504_2_1658496208_s_n2/C00000.seg.1 failed with error - No such file or directory, File name /data/gnode/userdata/gbase
错误码为GBA-01EX-700,同时细节显示I/O 错误,文件路径下显示无文件或目录,则为文件夹问题。
涉及的gbase原理
处理这个问题需要知道gbase的基本原理,分布式的数据存储一般至少有两份相同数据,同时,gctmpdb库为临时表库,gclusterdb库也会有临时库,但是下面还有系统表的文件数据;临时库下数据表的文件夹出错了一般是可以重建的,随时可以自动重建了,因为有主副本的数据,所以单机重建一下几乎不影响数据的跑数,而系统表的数据包括(audit_log_express ,dual ,nodedatamap ,rebalancing_status 四个重要的表),也是有备份表但不会立刻重现建立,所以需要手动拉表过来;
文件系统本身原因,这些临时表高频读写的文件夹容易崩坏,需要重建;同时赋予相应的权限;
处理方式
方式1.这个问题本来应该从根源上解决问题,经查,是内核版本bug的问题,升级系统内核版本可以解决。
方式2.系统管理岗一直没有处理,反应比较慢,因此只能从应用层面来解决;目前就只能从应用层面来解决这个问题,重建库表的文件夹,同时辅以相应的权限就能解决这个问题,但是什么时候坏,什么时候处理,偶然性时间,却很难去发现,只好选择一种相对暴力的方式,定时去检查文件夹是否可用,可用干做处理,不可以用就需要进行文件夹的重建授权,如果有系统表的文件夹,需要拉文件过来,目前长期运行3个月未发现任何问题;
下面讲从数据库应用角度来解决该问题.
实现:shell 脚本处理如下:
#gctmpdb,和gclusterdb 库下的表的文件夹出了错,就重建它并且把其他节点的表备份分片复制到本处理分片来,下文中**.***.***.**指的是数据库节点ip作了脱敏处理。根据实际情况修改即可。
#!/bin/sh num=ls -ld /data/gnode/userdata/gbase/gclusterdb/sys_tablespace|awk '{print $2}' if [ $num -gt 4200000000 ] then flag=date +%Y%m%d%H%M%S`
mv /data/gnode/userdata/gbase/gclusterdb/sys_tablespace /data/gnode/userdata/gbase/gclusterdb/sys_tablespace_${flag}
mkdir -p /data/gnode/userdata/gbase/gclusterdb/sys_tablespace
chmod 700 /data/gnode/userdata/gbase/gclusterdb/sys_tablespace
su - gbase
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/sys_tablespace/dual /data/gnode/userdata/gbase/gclusterdb/sys_tablespace/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/sys_tablespace/nodedatamap /data/gnode/userdata/gbase/gclusterdb/sys_tablespace/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/sys_tablespace/audit_log_express_n1 /data/gnode/userdata/gbase/gclusterdb/sys_tablespace/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/sys_tablespace/audit_log_express_n4 /data/gnode/userdata/gbase/gclusterdb/sys_tablespace/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/sys_tablespace/rebalancing_status_n1 /data/gnode/userdata/gbase/gclusterdb/sys_tablespace/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/sys_tablespace/rebalancing_status_n4 /data/gnode/userdata/gbase/gclusterdb/sys_tablespace/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/sys_tablespace/import_audit_log_errors_n1 /data/gnode/userdata/gbase/gclusterdb/sys_tablespace/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/sys_tablespace/import_audit_log_errors_n4 /data/gnode/userdata/gbase/gclusterdb/sys_tablespace/
fi
num7=ls -ld /data/gnode/userdata/gbase/gclusterdb/metadata|awk '{print $2}'
if [ num1 -gt 4200000000 ] then flag=`date +%Y%m%d%H%M%S` mv /data/gnode/userdata/gbase/gclusterdb/metadata /data/gnode/userdata/gbase/gclusterdb/metadata_{flag}
mkdir -p /data/gnode/userdata/gbase/gclusterdb/metadata
chmod 700 /data/gnode/userdata/gbase/gclusterdb/metadata
su -gbase
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/metadata/dual.GED /data/gnode/userdata/gbase/gclusterdb/metadata
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/metadata/dual.frm /data/gnode/userdata/gbase/gclusterdb/metadata/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/metadata/nodedatamap.GED /data/gnode/userdata/gbase/gclusterdb/metadata/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/metadata/nodedatamap.frm /data/gnode/userdata/gbase/gclusterdb/metadata/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/metadata/audit_log_express_n1.GED /data/gnode/userdata/gbase/gclusterdb/metadata/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/metadata/audit_log_express_n1.frm /data/gnode/userdata/gbase/gclusterdb/metadata/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/metadata/audit_log_express_n4.GED /data/gnode/userdata/gbase/gclusterdb/metadata/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/metadata/audit_log_express_n4.frm /data/gnode/userdata/gbase/gclusterdb/metadata/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/metadata/rebalancing_status_n1.GED /data/gnode/userdata/gbase/gclusterdb/metadata/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/metadata/rebalancing_status_n1.frm /data/gnode/userdata/gbase/gclusterdb/metadata/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/metadata/rebalancing_status_n4.GED /data/gnode/userdata/gbase/gclusterdb/metadata/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/metadata/rebalancing_status_n4.frm /data/gnode/userdata/gbase/gclusterdb/metadata/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb//metadata/import_audit_log_errors_n1.GED /data/gnode/userdata/gbase/gclusterdb/metadata/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/metadata/import_audit_log_errors_n1.frm /data/gnode/userdata/gbase/gclusterdb/metadata/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb//metadata/import_audit_log_errors_n4.GED /data/gnode/userdata/gbase/gclusterdb/metadata/
scp -r gbase@**.***.***.**:/data/gnode/userdata/gbase/gclusterdb/metadata/import_audit_log_errors_n4.frm /data/gnode/userdata/gbase/gclusterdb/metadata/
fi
num1=ls -ld /data/gnode/userdata/gbase/gctmpdb/metadata|awk '{print $2}'
if [ num1 -gt 4200000000 ] then flag=`date +%Y%m%d%H%M%S` mv /data/gnode/userdata/gbase/gctmpdb/metadata /data/gnode/userdata/gbase/gctmpdb/metadata_{flag}
mkdir -p /data/gnode/userdata/gbase/gctmpdb/metadata
chmod 700 /data/gnode/userdata/gbase/gctmpdb/metadata
fi
num2=ls -ld /data/gnode/userdata/gbase/gctmpdb/sys_tablespace|awk '{print $2}'
if [ num2 -gt 4200000000 ] then flag=`date +%Y%m%d%H%M%S` mv /data/gnode/userdata/gbase/gctmpdb/sys_tablespace /data/gnode/userdata/gbase/gctmpdb/sys_tablespace_{flag}
mkdir -p /data/gnode/userdata/gbase/gctmpdb/sys_tablespace
chmod 700 /data/gnode/userdata/gbase/gctmpdb/sys_tablespace
fi
num3=ls -ld /data/gnode/userdata/gbase/gctmpdb/sys_tablespace|awk '{print $1}'
num4=echo ${num3:0:1}
if [ "num4" != "d" ] then flag=`date +%Y%m%d%H%M%S` mv /data/gnode/userdata/gbase/gctmpdb/sys_tablespace /data/gnode/userdata/gbase/gctmpdb/sys_tablespace_{flag}
mkdir -p /data/gnode/userdata/gbase/gctmpdb/sys_tablespace
chmod 700 /data/gnode/userdata/gbase/gctmpdb/sys_tablespace
fi
num5=ls -ld /data/gnode/userdata/gbase/gctmpdb/metadata|awk '{print $1}'
num6=echo ${num5:0:1}
if [ "num6" != "d" ] then flag=`date +%Y%m%d%H%M%S` mv /data/gnode/userdata/gbase/gctmpdb/metadata /data/gnode/userdata/gbase/gctmpdb/metadata_{flag}
mkdir -p /data/gnode/userdata/gbase/gctmpdb/metadata
chmod 700 /data/gnode/userdata/gbase/gctmpdb/metadata
fi`
评论
热门帖子
- 12025-12-01浏览数:182763
- 22023-05-09浏览数:25057
- 42023-09-25浏览数:18525
- 52020-05-11浏览数:17528