从删库到跑路,再到修库(修复mongodb下线和卸载重装的问题)

2018年8月8号晚上,开始了我们大一在实验室第一个真正的项目。开始连集群机器,不小心连错一台存着以前爬取的数据的机器,上手就是一顿操作,怎么说呢,应了那句话,常在水便走哪有不湿鞋,淹死会水的,学长说自己建个数据库,我寻思确实,没有库和环境怎么跑程序,先搞库吧。一顿操作,发现这个机器上的mongodb不能正常使用,平时玩linux,万事重装+重启。当时想都没想dpkg -l mongodb 然后y加回车。当时我瞥到回显您是否删除xxxxxxmb (具体多大我记不住了),我靠,我慌逼了。然后就有了修库之路。

工具:xshell

首先xshell连机器

 

 连接成功后需要做的事

1. 提权,没有root权限干啥都不方便(删库也是,我初步打算给实验室集群做一个权限控制系统,不太容易,慢慢研究)

命令[sudo su]

2.  看一下mongodb相关文件都在什么位置

命令[locate mongodb]

# 这里有必要说一下mongodb的服务进程:

1). service mongodb 是mongodb的服务(就像apache的web服务一样)必须处于running状态才能使用mongodb数据库

2). mongod 是服务进程,应该放在后台运行,只有它正确运行时,mongodb数据库才可以接受其他主机或者本机的进程发起的连接请求

3). mongo 是本地数据库操作进程,可以用于直接操作本机数据库,一般只有在安装mongodb测试时才会用到。今天主要讲mongodb修库,就不多说了,网上部署mongodb的教程很多,可自行搜索。

# 再说一下mongodb的文件系统:

当你运行上面的命令时就可以看到mongodb的文件系统主要是两块

一是,数据存放位置,本机为 /var/lib/mongodb

二是,软件安装位置的文件系统

3. 进入数据库存储位置 & 查看目录文件

命令[cd /var/lib/mongodb] & [ls]

mongo.lock 文件是mongodb数据库异常关闭时,自动在数据库位置生成的锁文件,当该文件存在时,是无法启动mongod的,切记。

4. 这里删除mongod.lock文件

命令[rm mongod.lock]

再次ls 查看一下是否删除,

其实mongodb应该可以设置不加mongod.lock锁的,但是我觉得既然人家设置了这个东西就还是保留的好,毕竟做mongodb的人才是专业大佬,不是我懒不想找哦。

5. 查看一下mongodb的状态是否为running

命令[service mongodb status]

 如果是关闭的状态那就需要启动

开启:[service mongodb start]

关闭:[service mongodb stop]

重启:[service mongodb restart]

6. 开启mongod服务

命令[mongod]

可以看到mongod开启失败,报错如图 ,这里是个坑

错误提示:未找到/data/db路径

这是正常的,因为这是默认的启动方法,这种方法是认为/data/db是他的数据库位置,但是这和我们的实际情况不一样

#这里要讲一下mongod的两种启动方式:

1).命令启动:这种启动方法就是使用默认的启动配置,当然也可以制定某些配置来启动,其他的缺省就按默认来。如下我们需要的是修改端口和库路径,命令:[mongod --dbpath /var/lib/mongodb --port XXXXX]

ps:--fork:以守护进程的方式运行MongoDB,创建服务进程,相当于nohup ... &

我自己搞得时候傻了吧唧的只用了nohup,你们可以用--fork

nohup后台进程教程:https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/index.html

2).配置文件启动:本机ubuntu系统中配置文件路径在刚才locate mongodb的时候已经看到了,就是/etc/mongodb.conf

启动命令:[mongod -f /etc/mongodb.conf]

ps:我们可以使用vim 编辑它,后台运行配置文件修改需要 fork=true 

 dbpath = 库路径

 bind_ip = 绑定ip,一般是0.0.0.0(表示缺省,任何一个IP地址都可以访问到)

 port = 端口(默认是27017)

扔个详细的启动方法链接:https://www.cnblogs.com/lemon-le/p/7132038.html

7. 开启mongod可能遇到的问题,如果成功开启请跳过:

首先我们看到正在恢复数据,这就是个好兆头,可是它可不会这么轻易的让你搞定,他得我跟你玩会儿。库

马上就跳出来了个error:

 我们看到提示信息该地址已经被使用,就是说,该端口已经被占用,我估计是以前集群上跑程序的时候,有进程占用,它们用的是这个端口,当我把启动端口改掉就可以正常启动了,但是我们需要使用那个端口,我只能说,库。

需要注意的是当我们启动失败时,在数据库文件夹下可能又加上了lock文件,所以下次启动前记得 rm 它

1). 查看端口进程
命令:[netstat -nap | more]

可以看到112主机的2499号进程是mongod的我们需要kill它们

命令[kill 2499]

再查看一次确定一下。

有时候也需要使用ps列出系统进程,kill mongod的进程,方法一样 [kill + 进程PID]

2.)删掉lock文件,再尝试开启mongod服务

这次应该可以正常启动了。使用robo 3t连接一下数据库,端口号要对应,关掉xshell的会话再次连接,确认程序能在后台正常运行。

到这里要是还不行,那就是机器跟你过不去了,别删库了,拆机器跑路吧

8. 再说一下开机自启的方法

因为过年要关集群让它们集体放假,所以这里设置一下让服务开机自启。

whereis rc.local找了一下,发现有一个/etc/rc.local

它的内容应该是:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0

命令:[vi /etc/rc.local]

vim的使用就不多讲了,只需要再英文状态按 [i] 然后 输入命令,然后 [ESC] 然后 [:wq] 回车

将命令写入时,注意要放于exit 0之前

我这里写的是这样的,我也不知道能不能行。如果您是大佬请指正我,谢谢。


 

 9. 到这里修库之路圆满结束,历时3天。

一些废话:其实这篇文章不是说真的删了数据,而是卸载了数据库,还好mongodb卸载以后,数据还在,而且还能挂载上,这就很棒。如果你是真的把数据删了,按你可以研究一下这篇文章:(linux文件恢复工具)https://www.ibm.com/developerworks/cn/linux/1312_caoyq_linuxrestore/index.html

数据库的部署我这里没讲,需要的话可以看一下这篇文章:https://www.linuxidc.com/Linux/2016-08/133774.htm

这批修复了4台机器,一台是被我卸载的,另外2台是今天突然下线的,修的时候最后一台自己就好了?!

一些有的没的,想起来再补充>>>...

猜你喜欢

转载自blog.csdn.net/qq_41420747/article/details/81563253