Linux下MongoDB的安装与环境变量设置

MongoDB是一个C++编写的基于分布式文件存储的数据库,是一个介于关系和非关系之间的数据库,当然也属于NoSQL的行列,存储方式和Redis类似,是json格式的kav-value存储方式,只是Redis是内存存储,而MongoDB是和普通的数据库目录一样存储在硬盘上

  下面就在Linux上部署单节点的MongoDB,过程如下:

  一、首先去MongoDB官网下载软件包,首页是:https://www.mongodb.com/, 然后,点击右上角Download按钮进入下载界面,下载地址是:https://www.mongodb.com/download-center 进入后往下拉会看到下载选项,可以看到这里有很多版本,默认选择第一个社区版本,然后下面操作系统默认是Windows,这里要选择Linux  然后根据操作系统是32位还是64位下载相应版本的软件包即可,这里下载的是mongodb-linux-x86_64-3.2.10.tgz,下载完成之后上传至Linux系统,开始执行安装

  二、这里预定安装目录为/usr/local/mongodb,实际中可以自己确定,现在执行下面命令将MongoDB安装到指定位置:

tar -xvzf mongodb-linux-x86_64-4.0.3tgz

mv mongodb-linux-x86_64-4.0.3  /usr/local/mongodb

cd /usr/local/mongodb/

  三、现在就已经安装并进入了mongodb的目录,这时候为了方便执行,可以把bin目录绝对路径添加到环境变量即可,具体过程不再叙述了

新建data和logs文件夹,并在logs文件夹内创建mongo.log文件

cd mongodb

mkdir datamkdir logs

cd logs/touchmongo.log

接下来我们继续创建配置文件mongo.conf

vim mongo.conf

  在文件里面写入如下配置:

dbpath=/mongodb/data

logpath=/mongodb/logs/mongo.log

logappend=true

journal=true

quiet=true

port=27017

fork=true  #后台运行

bind_ip=0.0.0.0    #允许任何IP进行连接

auth=false #是否授权连接

  这里配置了数据库路径和日志路径以及端口,写完后:wq保存退出。

  接下来配置环境变量/etc.profle文件。往里面新增一行:

export PATH=$PATH:/usr/local/mongodb/bin

  其中$PATH后面跟的是实际安装的mongodb的bin所在目录。

  接着重新加载配置:

source /etc/profile

  四、mongodb数据库默认数据目录会存放在/data/db 所以可以执行命令 mkdir -p /data/db 建立目录,也可以手动设置其他目录,但是无论默认还是自定义,数据目录必须手动创建,否则mongodb会报错,现在可以启动mongodb服务了,命令为: ./bin/mongod 服务默认会在前台执行,如果数据目录不是/data/db 那么可以手动指定目录,启动命令为: ./bin/mongod --dbpath=/usr/mongo_data MongoDB数据库服务的默认端口是27017

[root@Anwar01 mongodb]# ./bin/mongod

2018-10-27T13:46:05.017+0800 I CONTROL  [initandlisten] MongoDB starting : pid=2118 port=27017 dbpath=/data/db 64-bit host=Anwar01

2018-10-27T13:46:05.017+0800 I CONTROL  [initandlisten] db version v4.0.3

2018-10-27T13:46:05.018+0800 I CONTROL  [initandlisten] git version: 7ea530946fa7880364d88c8d8b6026bbc9ffa48c

2018-10-27T13:46:05.018+0800 I CONTROL  [initandlisten] allocator: tcmalloc

2018-10-27T13:46:05.018+0800 I CONTROL  [initandlisten] modules: none

2018-10-27T13:46:05.018+0800 I CONTROL  [initandlisten] build environment:

2018-10-27T13:46:05.018+0800 I CONTROL  [initandlisten]    distarch: x86_64

2018-10-27T13:46:05.018+0800 I CONTROL  [initandlisten]    target_arch: x86_64

2018-10-27T13:46:05.018+0800 I CONTROL  [initandlisten] options: {}

2018-10-27T13:46:05.042+0800 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=390M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress),

2018-10-27T13:46:06.055+0800 I STORAGE  [initandlisten] WiredTiger message [1540619166:55594][2118:0x7f218994b9c0], txn-recover: Set global recovery timestamp: 0

2018-10-27T13:46:06.226+0800 I RECOVERY [initandlisten] WiredTiger recoveryTimestamp. Ts: Timestamp(0, 0)

2018-10-27T13:46:06.571+0800 I CONTROL  [initandlisten]

2018-10-27T13:46:06.571+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.

2018-10-27T13:46:06.571+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.

2018-10-27T13:46:06.571+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.

2018-10-27T13:46:06.571+0800 I CONTROL  [initandlisten]

2018-10-27T13:46:06.571+0800 I CONTROL  [initandlisten] ** WARNING: This server is bound to localhost.

2018-10-27T13:46:06.571+0800 I CONTROL  [initandlisten] **          Remote systems will be unable to connect to this server.

2018-10-27T13:46:06.572+0800 I CONTROL  [initandlisten] **          Start the server with --bind_ip <address> to specify which IP

2018-10-27T13:46:06.572+0800 I CONTROL  [initandlisten] **          addresses it should serve responses from, or with --bind_ip_all to

2018-10-27T13:46:06.572+0800 I CONTROL  [initandlisten] **          bind to all interfaces. If this behavior is desired, start the

2018-10-27T13:46:06.572+0800 I CONTROL  [initandlisten] **          server with --bind_ip 127.0.0.1 to disable this warning.

2018-10-27T13:46:06.572+0800 I CONTROL  [initandlisten]

2018-10-27T13:46:06.572+0800 I CONTROL  [initandlisten]

2018-10-27T13:46:06.572+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.

2018-10-27T13:46:06.572+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'

2018-10-27T13:46:06.572+0800 I CONTROL  [initandlisten]

2018-10-27T13:46:06.572+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.

2018-10-27T13:46:06.572+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'

2018-10-27T13:46:06.572+0800 I CONTROL  [initandlisten]

2018-10-27T13:46:06.572+0800 I CONTROL  [initandlisten] ** WARNING: soft rlimits too low. rlimits set to 4096 processes, 65536 files. Number of processes should be at least 32768 : 0.5 times number of files.

2018-10-27T13:46:06.572+0800 I CONTROL  [initandlisten]

2018-10-27T13:46:06.572+0800 I STORAGE  [initandlisten] createCollection: admin.system.version with provided UUID: 959e947f-ef9d-4be9-b37c-76d22776c5e1

2018-10-27T13:46:06.784+0800 I COMMAND  [initandlisten] setting featureCompatibilityVersion to 4.0

2018-10-27T13:46:06.792+0800 I STORAGE  [initandlisten] createCollection: local.startup_log with generated UUID: 841debcb-81aa-4b95-92a3-4b188780a205

2018-10-27T13:46:07.008+0800 I FTDC    [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data'

2018-10-27T13:46:07.009+0800 I NETWORK  [initandlisten] waiting for connections on port 27017

2018-10-27T13:46:07.009+0800 I STORAGE  [LogicalSessionCacheRefresh] createCollection: config.system.sessions with generated UUID: 79f75ca8-d3e1-4ce7-b360-c43c5933a3fb

2018-10-27T13:46:07.357+0800 I INDEX    [LogicalSessionCacheRefresh] build index on: config.system.sessions properties: { v: 2, key: { lastUse: 1 }, name: "lsidTTLIndex", ns: "config.system.sessions", expireAfterSeconds: 1800 }

2018-10-27T13:46:07.357+0800 I INDEX    [LogicalSessionCacheRefresh] building index using bulk method; build may temporarily use up to 500 megabytes of RAM

2018-10-27T13:46:07.388+0800 I INDEX    [LogicalSessionCacheRefresh] build index done.  scanned 0 total records. 0 secs

2018-10-27T13:46:07.389+0800 I COMMAND  [LogicalSessionCacheRefresh] command config.$cmd command: createIndexes { createIndexes: "system.sessions", indexes: [ { key: { lastUse: 1 }, name: "lsidTTLIndex", expireAfterSeconds: 1800 } ], $db: "config" } numYields:0 reslen:114 locks:{ Global: { acquireCount: { r: 2, w: 2 } }, Database: { acquireCount: { w: 2, W: 1 } }, Collection: { acquireCount: { w: 2 } } } protocol:op_msg 379ms

五、另外MongoDB提供了简单的web用户界面,可以查看服务的状态等,默认不开启可以在启动服务时添加参数,命令是: ./bin/mongod --rest

  启动后,默认的web管理端口是28017,这时候访问http://ip:28017即可看到管理界面

  如果想让服务一直跑在后台,那么可以使用nohup或者screen都可以

六、从命令行启动

    执行mongod,启动MongoDB服务器,mongod有很多可配置的启动选项,可以使用mongod --help查看所有选项

--dbpath:

指定数据目录,默认是/data/db下,每个mongod进程都需要独立的数据目录,加入有3个mongod实例,就必须要有3个独立的数据目录。当mongod启动时,会在数据目录中创建mongod.lock文件。这个文件用于防止其他mongod进程使用该数据目录。若当有一个mongd启动后,再启动另一个mongod时,若再使用刚刚已经启动mongod的目录,那么会报错:

2017-07-06T16:03:09.703+0800 I STORAGE [initandlisten] exception in initAndListen: 98 Unable to lock file: mongodb/0706/mongod.lock Resource temporarily unavailable. Is a mongod instance already running?, terminating

--port:

指定服务器监听的端口号。默认端口号为27017,要是运行多个mongod,必须指定不同的端口号

若有一个27017的端口已经使用了,那么如果启动第二个mongod的时候,若还指定27017的话,会报错:

2017-07-06T16:13:07.215+0800 E NETWORK [initandlisten] listen(): bind() failed Address already in use for socket: 0.0.0.0:27017

--fork:

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

nohup mongodb/bin/mongod --dbpath mongodb/0706 &

  与

mongodb/bin/mongod --dbpath mongodb/0706 --fork

一样的效果

--logpath: 

指定输出日志的路径,而不是输出到命令行。如果对文件夹有写权限的话,系统会在文件不存在时创建它。它将会已有文件覆盖掉,清除原来所有的日志记录。如果想保留原来的日志,还需要使用--logappend

--config:

指定配置文件,加载命令行未指定的各种选项

--directoryperdb:

使用该参数可以将每个数据库存放在单独的目录中

比如我新建两个数据库,那么在数据目录下会自动建立数据库名一样的文件夹

启动数据库时,MongoDB会将一个文件写入local数据库的startup_log集合中,该集合包含了MongoDB的版本,所基于的系统等

        七、停止Mongodb

方法一:查看进程,使用kill命令;不能使用kill -9

方法二:在客户端进去,使用shutdown命令

> use admin;

switched to db admin> db.shutdownServer();

server should be down...

在主节点(primary)上运行shutdown命令时,服务器在关闭之前,会先等待备份节点追赶主节点以保持同步。这将回滚的可能性降至最低,但shutdown操作有失败的可能性。如几秒钟内没有备份节点成功同步,则shutdown操作失败,主节点不会停止运行。

        方法三: 使用 Crtl+C 关闭    备注:如果以前台方式启动 MongoDB 服务,使用“Crtl+C” 服务会关闭,这种关闭方式会等待当前进行中的的操作完成,所以依然是干净的关闭方式。

          方法四:  使用 mongod 命令关闭

              $ mongod  --shutdown  --dbpath /data/db    备注:mongod 命令的 shutdown 选项能干净的关闭 MongoDB 服务。

  九、在mongodb服务启动的情况下,可以执行命令 ./bin/mongo 进入mongodb的后台管理shell

  第一次进入MongoDB shell时默认会选择test库,但是这是一个空库,后来进入时就会进入用户所操作的数据库,这时执行 show dbs 可以查看非空的数据库列表,可以看到默认只有local一个,其余的没有数据不显示,执行 db 可以查看当前选择的数据库;如果要切换选择数据库可以执行 use name1 ,这里可以切换到name1数据库,如果数据库存在则切换,如果不存在则直接创建,所以在mongodb中有一个显著的特点,所有的数据库和数据集合(数据表)都是在使用中创建,用户无需提前指定创建,退出mongodb shell可以执行命令 exit 或者 quit() 都可以

  到这里,在Linux下MongoDB的部署和最简单的shell入门操作就完成了

          十、日志

在启动mongod的时候,可以指定日志的级别,即(-v、-vv、-vvv、-vvvv、-vvvvv)或者在shell命令行执行命令修改

mongodb/bin/mongod --dbpath mongodb/0707 --directoryperdb --fork -vvv

日志级别越大,输出的日志越详细,调至5时,这时mongod会在日志中记录几乎所有的操作,包括每一个请求所处理的内容。

MongoDB默认记录耗时超过100毫秒的查询信息。如果100毫秒不适合需求,可以通过setProfilingLevel命令来改变,下面这条命令表示记录查询时间超过500毫秒的消息

    > db.setProfilingLevel(1,500)

    { "was" : 0, "slowms" : 100, "ok" : 1 }

如果想要日志分割,如按天存放,有两种方法

方法一:每天定时的执行kill -USR1 进程号,这样就可以看到,每执行一次kill -USR1 进程号,那么就会重新生成一个日志文件

方法二:在MongoDB的shell行执行,每执行一次都会产生一个新的日志文件

    > db.adminCommand({"logRotate":1})

    { "ok" : 1 }

要使分割日志生效,必须启动的时候使用--logpath,然后可以根据自己的需求,写shell或python脚本,然后crontab做成定时任务

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • Mac MongoDB安装 一、安装 MongoDB的安装方法有很多,本文以官方文档中的两种方法为准。 1. 手动...
    Keriy阅读 16,709评论 2 7
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,893评论 2 89
  • 一、系统及安装说明 系统:CentOS6.x_x64,mongodb-3.4.10。mongodb官方下载地址 :...
    Dream_f5de阅读 629评论 0 0
  • 背景: 阅读新闻 12C CDB模式下RMAN备份与恢复 [日期:2016-11-29] 来源:Linux社区 作...
    阳屯okyepd阅读 3,332评论 0 7
  • 俺们家,洗衣做饭搞卫生的家务都是我干,一直觉得挺好的。 近来感觉有点不对劲,思来想去,原来问题出在这里:我属牛,妻...
    Outman_2d44阅读 278评论 0 0