一、安装
1、基本规划
目标版本:MongoDB Community Edition 3.6.15
安装方式:YUM
2、配置yum源及MongoDB安装
touch /etc/yum.repos.d/mongodb-org-3.6.repo
配置如下
[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
注:版本号可按需修改,如需要安装3.4版本,则 touch /etc/yum.repos.d/mongodb-org-3.4.repo
[mongodb-org-3.4]
name=MongoDB 3.4 Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=0
enabled=1
yum install mongodb-org
Dependencies Resolved
====================================================================================================================================================
Package Arch Version Repository Size
====================================================================================================================================================
Installing:
mongodb-org x86_64 3.6.15-1.el7 mongodb-org-3.6 5.8 k
Installing for dependencies:
mongodb-org-mongos x86_64 3.6.15-1.el7 mongodb-org-3.6 12 M
mongodb-org-server x86_64 3.6.15-1.el7 mongodb-org-3.6 21 M
mongodb-org-shell x86_64 3.6.15-1.el7 mongodb-org-3.6 12 M
mongodb-org-tools x86_64 3.6.15-1.el7 mongodb-org-3.6 65 M
Transaction Summary
====================================================================================================================================================
Install 1 Package (+4 Dependent packages)
Total download size: 109 M
Installed size: 287 M
100多兆的安装包大小,嫌慢可以直接从以下路径下载:
二、配置
1、前期配置
ulimit推荐配置:
-f (file size): unlimited
-t (cpu time): unlimited
-v (virtual memory): unlimited [1]
-l (locked-in-memory size): unlimited
-n (open files): 64000
-m (memory size): unlimited [1] [2]
-u (processes/threads): 64000
特别的,RHEL系的Linux会利用nproc限制最大进程数,而不理会ulimit的设置。需要单独配置文件如下:
RHEL / CentOS 7 4096 /etc/security/limits.d/20-nproc.conf
RHEL / CentOS 6 1024 /etc/security/limits.d/90-nproc.conf
具体到MongoDB,可以在 /etc/security/limits.d/99-mongodb-nproc.conf 中配置更大的 soft nproc 和 hard nproc。注:若有运行中mongod、mongos,需要重启生效。
2、用户与目录
RPM包安装的MongoDB会自动创建mongod用户,以及
数据目录:/var/lib/mongo
日志目录:/var/log/mongodb
并会自动归属到mongod:mongod。二进制包安装的需要自行配置。
路径可以在 /etc/mongod.conf 中调整
数据目录:storage.dbPath
日志目录:systemLog.path
目录若有调整(包括端口),需关闭SELinux,或如下配置:
Configure SELinux policy for MongoDB
3、启动与关闭
service mongod start|stop|restart
启动日志如下
[root@ceshi2377 ~]# cat /var/log/mongodb/mongod.log
2019-12-03T22:56:39.086+0800 I CONTROL [main] ***** SERVER RESTARTED *****
2019-12-03T22:56:39.829+0800 I CONTROL [initandlisten] MongoDB starting : pid=1808 port=27017 dbpath=/var/lib/mongo 64-bit host=ceshi2377
2019-12-03T22:56:39.829+0800 I CONTROL [initandlisten] db version v3.6.15
2019-12-03T22:56:39.829+0800 I CONTROL [initandlisten] git version: 18934fb5c814e87895c5e38ae1515dd6cb4c00f7
2019-12-03T22:56:39.830+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
2019-12-03T22:56:39.830+0800 I CONTROL [initandlisten] allocator: tcmalloc
2019-12-03T22:56:39.830+0800 I CONTROL [initandlisten] modules: none
2019-12-03T22:56:39.830+0800 I CONTROL [initandlisten] build environment:
2019-12-03T22:56:39.830+0800 I CONTROL [initandlisten] distmod: rhel70
2019-12-03T22:56:39.830+0800 I CONTROL [initandlisten] distarch: x86_64
2019-12-03T22:56:39.830+0800 I CONTROL [initandlisten] target_arch: x86_64
2019-12-03T22:56:39.830+0800 I CONTROL [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "127.0.0.1", port: 27017 }, processManagement: { fork: true, pidFilePath: "/var/run/mongodb/mongod.pid", timeZoneInfo: "/usr/share/zoneinfo" }, storage: { dbPath: "/var/lib/mongo", journal: { enabled: true } }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } }
2019-12-03T22:56:39.834+0800 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=256M,cache_overflow=(file_max=0M),session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),compatibility=(release="3.0",require_max="3.0"),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress),
2019-12-03T22:56:40.402+0800 I STORAGE [initandlisten] WiredTiger message [1575385000:402545][1808:0x7fe497392b80], txn-recover: Set global recovery timestamp: 0
2019-12-03T22:56:40.544+0800 I CONTROL [initandlisten]
2019-12-03T22:56:40.544+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2019-12-03T22:56:40.544+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2019-12-03T22:56:40.544+0800 I CONTROL [initandlisten]
2019-12-03T22:56:40.545+0800 I CONTROL [initandlisten]
2019-12-03T22:56:40.545+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2019-12-03T22:56:40.545+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2019-12-03T22:56:40.545+0800 I CONTROL [initandlisten]
2019-12-03T22:56:40.545+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2019-12-03T22:56:40.545+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2019-12-03T22:56:40.545+0800 I CONTROL [initandlisten]
2019-12-03T22:56:40.675+0800 I STORAGE [initandlisten] createCollection: admin.system.version with provided UUID: ba3997a1-3549-44b6-b8b9-0fbb24ef41ea
2019-12-03T22:56:40.712+0800 I COMMAND [initandlisten] setting featureCompatibilityVersion to 3.6
2019-12-03T22:56:40.719+0800 I STORAGE [initandlisten] createCollection: local.startup_log with generated UUID: 3457f157-2b95-46ad-81ac-a3656913f9fd
2019-12-03T22:56:40.729+0800 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory '/var/lib/mongo/diagnostic.data'
2019-12-03T22:56:40.731+0800 I NETWORK [initandlisten] listening via socket bound to 127.0.0.1
2019-12-03T22:56:40.731+0800 I NETWORK [initandlisten] listening via socket bound to /tmp/mongodb-27017.sock
2019-12-03T22:56:40.731+0800 I NETWORK [initandlisten] waiting for connections on port 27017
2019-12-03T22:56:40.743+0800 I STORAGE [LogicalSessionCacheRefresh] createCollection: config.system.sessions with generated UUID: 016b7cab-ba6a-4cd4-a81d-b9806aab397f
2019-12-03T22:56:40.748+0800 I INDEX [LogicalSessionCacheRefresh] build index on: config.system.sessions properties: { v: 2, key: { lastUse: 1 }, name: "lsidTTLIndex", ns: "config.system.sessions", expireAfterSeconds: 1800 }
2019-12-03T22:56:40.748+0800 I INDEX [LogicalSessionCacheRefresh] building index using bulk method; build may temporarily use up to 500 megabytes of RAM
2019-12-03T22:56:40.749+0800 I INDEX [LogicalSessionCacheRefresh] build index done. scanned 0 total records. 0 secs
有该提示,说明正常启动:NETWORK [initandlisten] waiting for connections on port 27017
在配置文件中 net.port 默认 27017
4、mongo shell 启动
[root@ceshi2377 ~]# mongo --host 127.0.0.1:27017
MongoDB shell version v3.6.15
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("ba7a7ae6-fd65-4c0f-a897-d15c7f46ec07") }
MongoDB server version: 3.6.15
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2019-12-03T22:56:40.544+0800 I CONTROL [initandlisten]
2019-12-03T22:56:40.544+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2019-12-03T22:56:40.544+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2019-12-03T22:56:40.544+0800 I CONTROL [initandlisten]
2019-12-03T22:56:40.545+0800 I CONTROL [initandlisten]
2019-12-03T22:56:40.545+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2019-12-03T22:56:40.545+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2019-12-03T22:56:40.545+0800 I CONTROL [initandlisten]
2019-12-03T22:56:40.545+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2019-12-03T22:56:40.545+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2019-12-03T22:56:40.545+0800 I CONTROL [initandlisten]
>
三、mongo shell 基础操作
本章仅介绍mongo shell方式,更多driver见参考文档二
下表首先列举了MongoDB的相关术语
MySQL术语 | MongoDB术语 | 注解 |
database | database | 数据库 |
table | collection | 表/集合 |
row | ducument | 行记录/文档 |
column | field | 字段/域 |
primary key | primary key | 主键 |
index | index | 索引 |
1、登录
mongo --username <user> --password <pass> --host <host> --port 28015
mongo -u <user> -p <pass> --host <host> --port 28015
直接运行mongo而不指定任何参数,将会尝试从 localhost:27017 登录
2、退出
control+c 或者 exit
3、.mongorc.js 文件
位于HOME目录下,mongo shell 会先展示该文件的内容(如果存在的话),继而显示 prompt 信息。也可以--eval方式选择其他js文件。若以 --norc 方式启动shell,将不会读取该文件。
4、库的操作
(1)显示所有数据库:show dbs
(2)显示当前所在库:db(首次登录默认在test库)
(3)定位到某个库:
法一:use <database>
法二:db = db.getSiblingDB('users'),将db对象指向数据库名:users
(4)
参考文档:
Install MongoDB Community Edition on Red Hat Enterprise or CentOS Linux
挖一挖MongoDB的备份与还原(实现指定时间点还原和增量备份还原)