构造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\n" %(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

mongodb异常恢复的更多相关文章

  1. undo丢失恢复异常恢复,运维DBA反映Oracle数据库无法启动报错ORA-01157 ORA-01110,分析原因为Oracle数据库坏块导致

    本文转自 惜纷飞 大师. 模拟基表事务未提交数据库crash,undo丢失恢复异常恢复,运维DBA反映Oracle数据库无法启动报错ORA-01157 ORA-01110,分析原因为Oracle数据库 ...

  2. 010.MongoDB备份恢复

    一 MongoDB备份 1.1 备份概述 mongodb数据备份和还原主要分为二种,一种是针对于库的mongodump和mongorestore,一种是针对库中表的mongoexport和mongoi ...

  3. MongoDB备份恢复与导出导入

    说明:本文所有操作均在win7下的MongoDB3.4.4版本中进行. 一.备份与恢复 1. 备份: mongodump -h IP --port 端口 -u 用户名 -p 密码 -d数据库 -o 文 ...

  4. mongodb备份恢复,数据导入导出

    数据导出 mongoexport 假设库里有一张apachelog表,里面有2 条记录,我们要将它导出 /test/mongodb/bin/mongo use wxdata switched to d ...

  5. SpringBoot使用MongoDB异常问题

    一 环境介绍 SpringBoot1.5.13.RELEASE(本地) Spring Data MongoDB Java 8 MongoDB(青云) 二 问题描述 使用Studio3T或者Compas ...

  6. springboot集成mongoDB 异常认证

    1.springboot连接mongoDB 出现异常认证 异常详情: com.mongodb.MongoSecurityException: Exception authenticating Mong ...

  7. Mongodb异常关闭重启失败解决

    情况再现,连接mongodb的网站没有关,直接关闭了mongodb的cmd窗口.再次打开mongodb出现失败. 解决办法:网上说是删除 *.lock文件,再进行 --repair ,最后再打开mon ...

  8. mongodb备份恢复

    注意:在备份文件存放目录的选择上有这样一个条件,文件存放目录不管有多深,都只能有它一个文件:(即除了备份文件之外只能存在文件夹,这个条件约束其整个目录树) 数据备份 : /mongodump --ho ...

  9. 【MongoDB异常】Exception authenticating MongoCredential解决方法

    我们通过ideal编辑器编辑 springboot时候,出现这个错误: com.mongodb.MongoSecurityException: Exception authenticating Mon ...

随机推荐

  1. 长度不超过n的连续最大和___优先队列

    题目链接: https://nanti.jisuanke.com/t/36116 题目: 在蒜厂年会上有一个抽奖,在一个环形的桌子上,有 nn 个纸团,每个纸团上写一个数字,表示你可以获得多少蒜币.但 ...

  2. export 和import使用

    在JavaScript ES6中,export与export default均可用于导出常量.函数.文件.模块等,你可以在其它文件或模块中通过import+(常量 | 函数 | 文件 | 模块)名的方 ...

  3. excle中如何将一串数字前后加上单引号

    1.新建excle表 2.构造如下一串字母加数字的字符串: 3.在B1栏中输入="“"&A1&"”",展示效果如下:

  4. 会话的保持和form表单

    会话的保持和form表单 cookie 设置cookie from django.shortcuts import render, HttpResponse, redirect, reverse de ...

  5. C++学习(四十)(C语言部分)之 学生管理系统设计

    涉及到的:指针申请内存 结构体数据结构部分排序文件操作 vs2013数据结构 排序 结构体 指针 功能:1.人工录入信息2.删除3.查找4.修改5.全部显示6.文件的读取和保存7.排序 设计:学生信息 ...

  6. 通过用户名&密码验证访问远程共享文件夹 C#

    通过代码先在cmd中运行net use进行验证,然后就可访问共享文件了. 验证方法如下: public string connectState(string path/*要访问的文件路径*/, str ...

  7. 如何将项目连接数据库(连接mysql)

    首先需要在项目中加入这一串代码: //加载驱动类 连接数据库有多种方式 比如:jdbc 桥接 Connection con=null; try { Class.forName("com.my ...

  8. string函数的一些实现

    /************************************************************************* > File Name: test.cpp ...

  9. Redis使用规范

    突出强调部分 [强制]key名不要包含特殊字符,如空格.换行.单双引号以及其他转义字符 [强制]拒绝bigkey(防止网卡流量.慢查询) [强制]控制key的生命周期,redis不是垃圾桶 [强制]技 ...

  10. Java注解总结2

    注解是Java元数据,可以理解成代码的标签,正确使用能极大的简化代码的编写逻辑,在各种框架代码中使用也越来越多. 一.注解的应用场景 生成doc文档: 编译器类型格式检查: 运行时处理如注入依赖等 二 ...