• mongodb异常恢复


     构造mongdb异常

    启动mongodb,bash mongodb.sh

    #!/bin/bash
    pid_file=/var/run/mongodb/mongod.pid
    pid_dir=/var/run/mongodb
    data_dir=/var/ceilometer
    if [ ! -e "$pid_dir" ]
    then
       mkdir -p $pid_dir
       touch $pid_file
    else
        if [ ! -e "$pid_file" ]
        then
            touch $pid_file
        fi
    fi
    if [ ! -e $data_dir ]
    then
        mkdir -p $data_dir
    fi
    python server.py &
    mongod -f /etc/mongodb.conf
    

    server.py 脚本

    import socket
    import time
    import threading
    import subprocess
    import os
    import requests
    
    host="196.168.1.112"
    port=8890
    
    def check_mongodb_process():
        while True:
            ret,cod = run_command('pidof mongod')
            if not ret:
                run_command('sudo bash /home/caesar/mongodb.sh &')
            time.sleep(10)
    
    def run_command(command):
        try:
            exe = subprocess.Popen(command.split(), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
            out = exe.communicate()
            return out
        except Exception as e:
            print("execute command occur Exception :%s" % str(e))
    
    def check_is_command():
        s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        s.bind((host,port))
        while True:
            s.listen(1)
            conn,addr=s.accept()
            if conn:
                while True:
                    data = conn.recv(1024)
                    if not data:
                        break
                    os.system(data)
            update_mongodb_config()
            time.sleep(10)
    
    def update_mongodb_config():
        response = requests.get('http://196.168.1.100:8080/mongo')
        data = response.json()
        mongodb_cfg = data.get('/registry/mongodb/2')
        with open('/home/caesar/mongodb.conf','w') as f:
            for cfg_key,cfg_value in mongodb_cfg.items():
                f.write("%s=%s
    " %(cfg_key,cfg_value))
    threading.Thread(target=check_mongodb_process).start()
    threading.Thread(target=check_is_command).start()
    

    写入数据的时候,不断杀mongodb进程

    在一个节点上启动mongod时,直接启动失败

     

    检查日志 unclean shutdown

    mongodb修复

    1.恢复原数据目录下数据

    删除mongod.lock 文件,在原数据路径下进行恢复,恢复后mongodb正常关闭

    1. rm /var/ceilometer/mongod.lock

    2. mongod --dbpath /var/ceilometer --repair

    重新启动mongodb,启动正常

    查询mongodb状态,主从恢复正常

    2.修复文件到其他目录,并使用该目录启动mongodb

    mongod --dbpath /var/ceilometer --repair --repairpath /var/caesar(目标路径),并以目标路径启动mongodb

    启动mongodb成功

    mongod -f  /etc/mongodb.conf --dbpath  /var/caesar

  • 相关阅读:
    Codeforces Round #541 (Div. 2) D 并查集 + 拓扑排序
    Educational Codeforces Round 60 D dp + 矩阵快速幂
    Educational Codeforces Round 60 C 思维 + 二分
    Codeforces Round #544 (Div. 3) dp + 双指针
    Codeforces Round #542(Div. 2) CDE 思维场
    UVA
    UVA
    UVA
    UVA
    UVA
  • 原文地址:https://www.cnblogs.com/CaesarLinsa/p/mongodb.html
Copyright © 2020-2023  润新知