月满弦 發表於 2020-6-13 01:31:00

MongoDB的启动与停止

<div><span style="font-size: 18px" data-wiz-span="data-wiz-span"><strong>1:启动和停止Mongodb</strong></span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px" data-wiz-span="data-wiz-span"><strong>&nbsp;</strong>1)从命令行启动</span></div>
<div><span style="font-size: 18px">&nbsp; &nbsp; &nbsp;执行mongod,启动MongoDB服务器,mongod有很多可配置的启动选项,可以使用<span data-wiz-span="data-wiz-span"><strong>mongod --help</strong>查看所有选项</span></span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px"><strong><span data-wiz-span="data-wiz-span">--dbpath:</span></strong></span></div>
<div><span style="font-size: 18px">指定数据目录,默认是/data/db下,每个mongod进程都需要独立的数据目录,加入有3个mongod实例,就必须要有3个独立的数据目录。当mongod启动时,会在数据目录中创建mongod.lock文件。这个文件用于防止其他mongod进程使用该数据目录。若当有一个mongd启动后,再启动另一个mongod时,若再使用刚刚已经启动mongod的目录,那么会报错:</span></div>
<div>
<div class="cnblogs_code">
<pre><span style="font-size: 18px">2017-07-06T16:03:09.703+0800 I STORAGE exception in initAndListen: 98 Unable to lock file: mongodb/0706/mongod.lock Resource temporarily unavailable. Is a mongod instance already running?, terminating</span></pre>
</div>
</div>
<div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
</div>
<div><span style="font-size: 18px"><strong><span data-wiz-span="data-wiz-span">--port:</span></strong></span></div>
<div><span style="font-size: 18px">指定服务器监听的端口号。默认端口号为27017,要是运行多个mongod,必须指定不同的端口号</span></div>
<div><span style="font-size: 18px">若有一个27017的端口已经使用了,那么如果启动第二个mongod的时候,若还指定27017的话,会报错:</span></div>
<div>
<div class="cnblogs_code">
<pre><span style="font-size: 18px">2017-07-06T16:13:07.215+0800 E NETWORK listen(): bind() failed Address already in use for socket: 0.0.0.0:27017</span></pre>
</div>
</div>
<div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
</div>
<div><span style="font-size: 18px" data-wiz-span="data-wiz-span"><strong>--fork:</strong></span></div>
<div><span style="font-size: 18px">以守护进程的方式运行MongoDB,创建服务进程,相当于nohup ... &amp;</span></div>
<div>
<div class="cnblogs_code">
<pre><span style="font-size: 18px">nohup mongodb/bin/mongod --dbpath mongodb/0706 &amp;</span></pre>
</div>
</div>
<div>
<div><span style="font-size: 18px">&nbsp; 与</span></div>
<div>
<div class="cnblogs_code">
<pre><span style="font-size: 18px">mongodb/bin/mongod --dbpath mongodb/0706 --fork </span></pre>
</div>
</div>
<div><span style="font-size: 18px">一样的效果</span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
</div>
<div><span style="font-size: 18px" data-wiz-span="data-wiz-span"><strong>--logpath: &nbsp;</strong></span></div>
<div><span style="font-size: 18px">指定输出日志的路径,而不是输出到命令行。如果对文件夹有写权限的话,系统会在文件不存在时创建它。它将会已有文件覆盖掉,清除原来所有的日志记录。如果想保留原来的日志,还需要使用<span data-wiz-span="data-wiz-span"><strong>--logappend</strong></span></span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px"><strong>--config:</strong></span></div>
<div><span style="font-size: 18px">指定配置文件,加载命令行未指定的各种选项</span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px" data-wiz-span="data-wiz-span"><strong>--directoryperdb:</strong><br data-filtered="filtered"></span></div>
<div><span style="font-size: 18px">使用该参数可以将每个数据库存放在单独的目录中</span></div>
<div><span style="font-size: 18px">比如我新建两个数据库,那么在数据目录下会自动建立数据库名一样的文件夹</span></div>
<div><span style="font-size: 18px"><img src="https://images2015.cnblogs.com/blog/746846/201707/746846-20170707142216456-1701590800.png" alt=""></span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px">启动数据库时,MongoDB会将一个文件写入local数据库的startup_log集合中,该集合包含了MongoDB的版本,所基于的系统等</span></div>
<div>
<div>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy" style="font-size: 18px"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre><span style="font-size: 18px">    &gt; use local
    switched to db local
    &gt; db.startup_log.findOne()
    {
    "_id" : "vst2-1499343744092",
    "hostname" : "vst2",
    "startTime" : ISODate("2017-07-06T12:22:24Z"),
    "startTimeLocal" : "Thu Jul 6 20:22:24.092",
    "cmdLine" : {
    "storage" : {
    "dbPath" : "mongodb/0707",
    "directoryPerDB" : true
    }
    },
    "pid" : NumberLong(15613),
    "buildinfo" : {
    "version" : "3.4.5",
    "gitVersion" : "520b8f3092c48d934f0cd78ab5f40fe594f96863",
    "modules" : [ ],
    "allocator" : "tcmalloc",
    "javascriptEngine" : "mozjs",
    "sysInfo" : "deprecated",
    "versionArray" : [
    3,
    4,
    5,
    0
    ],
    "openssl" : {
    "running" : "OpenSSL 1.0.1f 6 Jan 2014",
    "compiled" : "OpenSSL 1.0.1f 6 Jan 2014"
    },
    "buildEnvironment" : {
    "distmod" : "ubuntu1404",
    "distarch" : "x86_64",
    "cc" : "/opt/mongodbtoolchain/v2/bin/gcc: gcc (GCC) 5.4.0",
    "ccflags" : "-fno-omit-frame-pointer -fno-strict-aliasing -ggdb -pthread -Wall -Wsign-compare -Wno-unknown-pragmas -Winvalid-pch -Werror -O2 -Wno-unused-local-typedefs -Wno-unused-function -Wno-deprecated-declarations -Wno-unused-but-set-variable -Wno-missing-braces -fstack-protector-strong -fno-builtin-memcmp",
    "cxx" : "/opt/mongodbtoolchain/v2/bin/g++: g++ (GCC) 5.4.0",
    "cxxflags" : "-Woverloaded-virtual -Wno-maybe-uninitialized -std=c++11",
    "linkflags" : "-pthread -Wl,-z,now -rdynamic -Wl,--fatal-warnings -fstack-protector-strong -fuse-ld=gold -Wl,--build-id -Wl,-z,noexecstack -Wl,--warn-execstack -Wl,-z,relro",
    "target_arch" : "x86_64",
    "target_os" : "linux"
    },
    "bits" : 64,
    "debug" : false,
    "maxBsonObjectSize" : 16777216,
    "storageEngines" : [
    "devnull",
    "ephemeralForTest",
    "mmapv1",
    "wiredTiger"
    ]
    }
    }</span></pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy" style="font-size: 18px"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p><span style="font-size: 18px">&nbsp;</span></p>
</div>
<div><span style="font-size: 18px">&nbsp;</span></div>
</div>
<div><span style="font-size: 18px">默认情况下,启动mongod时还会启动一个基本的HTTP服务器,该服务器监听的端口号比主服务的端口号大1000。这个服务提供了HTTP接口,可以查看Mongodb的一些基本信息。这些信息也可以通过shell来查看。比如说你启动的是默认端口27017,那么在浏览器打开http://10.0.0.13:28017&nbsp; 但是你打开的时候可能没有,因为默认管理接口是关闭的,所以在启动的时候加上开启管理接口参数<span data-wiz-span="data-wiz-span"><strong>--httpinterface,也就是</strong><strong>&nbsp;mongodb/bin/mongod --dbpath mongodb/0706 --fork --logpath 0706.log --httpinterface&nbsp;</strong><br data-filtered="filtered"></span></span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div>
<div><span style="font-size: 18px">&nbsp;<img src="https://images2015.cnblogs.com/blog/746846/201707/746846-20170707142315862-426530893.png" alt=""></span><br data-filtered="filtered">
<div><span style="font-size: 18px">&nbsp;</span></div>

</div>
<div><span style="font-size: 18px">当你点进去的时候,是这样的,说你的参数没打开,所以启动的时候还得加上<span data-wiz-span="data-wiz-span"><strong>--rest</strong>参数</span></span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px"><img src="https://images2015.cnblogs.com/blog/746846/201707/746846-20170707142359831-898279081.png" alt=""></span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px">加上参数重新启动之后,可以看到,有详细的信息了</span></div>
<div><span style="font-size: 18px"><img src="https://images2015.cnblogs.com/blog/746846/201707/746846-20170707142429237-718961809.png" alt=""></span></div>

</div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px">2):配置文件</span></div>
<div><span style="font-size: 18px">Mongodb支持从文件读取配置文件。指定配置文件可以使用<span data-wiz-span="data-wiz-span"><strong>-f</strong>和<span data-wiz-span="data-wiz-span"><strong>--config</strong>选项</span></span></span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px"><strong>2:停止Mongodb</strong></span></div>
<div><span style="font-size: 18px">方法一:查看进程,使用kill命令;<span data-wiz-span="data-wiz-span"><strong><span data-wiz-span="data-wiz-span">不能使用kill -9</span></strong><br data-filtered="filtered"></span></span></div>
<div><span style="font-size: 18px">方法二:在客户端进去,使用shutdown命令</span></div>
<div>
<div>
<div class="cnblogs_code">
<pre><span style="font-size: 18px">&gt; use admin;
switched to db admin
&gt; db.shutdownServer();
server should be down...</span></pre>
</div>
<p><span style="font-size: 18px">&nbsp;</span></p>
</div>
<div><span style="font-size: 18px">在主节点(primary)上运行shutdown命令时,服务器在关闭之前,会先等待备份节点追赶主节点以保持同步。这将回滚的可能性降至最低,但shutdown操作有失败的可能性。如几秒钟内没有备份节点成功同步,则shutdown操作失败,主节点不会停止运行。</span></div>
</div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px"><strong>3:日志</strong></span></div>
<div><span style="font-size: 18px">在启动mongod的时候,可以指定日志的级别,即(-v、-vv、-vvv、-vvvv、-vvvvv)或者在shell命令行执行命令修改</span></div>
<div>
<div class="cnblogs_code">
<pre><span style="font-size: 18px">mongodb/bin/mongod --dbpath mongodb/0707 --directoryperdb --fork -vvv </span></pre>
</div>
</div>
<div><span style="font-size: 18px">日志级别越大,输出的日志越详细,调至5时,这时mongod会在日志中记录几乎所有的操作,包括每一个请求所处理的内容。</span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px">MongoDB默认记录耗时超过100毫秒的查询信息。如果100毫秒不适合需求,可以通过setProfilingLevel命令来改变,下面这条命令表示记录查询时间超过500毫秒的消息</span></div>
<div>
<div>
<div class="cnblogs_code">
<pre><span style="font-size: 18px">    &gt; db.setProfilingLevel(1,500)
    { "was" : 0, "slowms" : 100, "ok" : 1 }</span></pre>
</div>
</div>
<div><span style="font-size: 18px">&nbsp;</span></div>
</div>
<div><span style="font-size: 18px">如果想要日志分割,如按天存放,有两种方法</span></div>
<div><span style="font-size: 18px" data-wiz-span="data-wiz-span"><strong>方法一:</strong>每天定时的执行<span data-wiz-span="data-wiz-span"><strong>kill -USR1 进程号</strong>,这样就可以看到,每执行一次kill -USR1 进程号,那么就会重新生成一个日志文件</span></span></div>
<div><span style="font-size: 18px"><img src="https://images2015.cnblogs.com/blog/746846/201707/746846-20170707142553847-145694461.png" alt=""></span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px" data-wiz-span="data-wiz-span"><strong>方法二:在MongoDB的shell行执行,每执行一次都会产生一个新的日志文件</strong></span></div>
<div>
<div>
<div class="cnblogs_code">
<pre><span style="font-size: 18px">    &gt; db.adminCommand({"logRotate":1})
    { "ok" : 1 }</span></pre>
</div>
</div>
<div><span style="font-size: 18px">&nbsp;</span></div>
</div>
<div><span style="font-size: 18px">&nbsp;要使分割日志生效,必须启动的时候使用<span data-wiz-span="data-wiz-span"><strong>--logpath</strong>,然后可以根据自己的需求,写shell或python脚本,然后crontab做成定时任务</span></span></div>
<div><span style="font-size: 18px">&nbsp;</span></div>
<div><span style="font-size: 18px">&nbsp;</span></div><br><br>
来源:https://www.cnblogs.com/zhm1985/p/13111448.html
頁: [1]
查看完整版本: MongoDB的启动与停止