gbase8a如何在繁忙的情况下修复gbase.table_distribution

本文介绍了一个Python脚本,用于修复GBase 8A数据库中table_distribution表的损坏问题。该脚本通过从正常节点复制文件、清除DML事件及刷新表来实现修复,并适用于繁忙系统。

gbase.table_distribution在gbase 8a中是最重要的系统表之一。有时碰到硬件异常什么的,文件可能会受损。在自动同步不能修复时,如何修复它呢。特别是一个繁忙的系统中,不断有DDL的情况下。修复分三步,但这三步如果手工进行,就会有间隙,在间隙中有DDL,就会失败。 所以可以写个python脚本来一次完成。之所以要用python,是因为这个同步异常产生的事件,要通过gbase提供的python接口来完成。
第一步是从其它正常的管理节点scp文件过来,第二步是清除dml事件,第三步是sql刷新表。

脚本如下(将IP,密码改成你的即可。ssh中的gbase指运行数据库的操作系统用户)。
本例中10.17.46.21是需要修复的管理节点。 10.17.46.25 是其它正常的管理节点。

#!/usr/bin/env python


 
import sys
from optparse import OptionParser
import paramiko
import gcware


def main():
    try:
        ssh = paramiko.SSHClient()
        key = paramiko.AutoAddPolicy()
        ssh.set_missing_host_key_policy(key)
        ssh.connect('10.17.46.21',22,'gbase','gbase',timeout=5)
        print('\033[0m')
        
        print '     1 +++++++++++++++ scp file from other cluser node +++++++++++++++'.lstrip()
        stdin, stdout, stderr = ssh.exec_command("source ~/.bashrc;scp -p gbase@10.17.46.25:/opt/gcluster/userdata/gcluster/gbase/table_distribution*  gbase@10.17.46.21:/opt/gcluster/userdata/gcluster/gbase/")    
        for ika in stdout.readlines():
            print(ika) 
        for iee in stderr.readlines():
            print('\033[1;31;40m')
            print(iee)  
        print ('\n')    
        
        print ('    2 +++++++++++++++ gcluserd cleardmlstoragefevent:  +++++++++++++++')
        print gcware.cleardmlstoragefevent("gbase.table_distribution")   
        print ('\n') 

        print '     3+++++++++++++++ gccli flush table  +++++++++++++++'.lstrip()
        stdin, stdout, stderr = ssh.exec_command("source ~/.bashrc;gccli -uroot -p123456 -h10.17.46.21 -vvv -e'flush table gbase.table_distribution;'")   
        for ik in stdout.readlines():
            print(ik) 
        for iee in stderr.readlines():
            print('\033[1;31;40m')
            print(iee)      
        ssh.close()
                
        print('\033[0m') 
        

                 
    except:
        sys.exit(1)

if __name__=='__main__':
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值