Mongo配置相关

文档:https://www.mongodb.org.cn/tutorial/9.html
https://docs.mongodb.com/manual/

2020.9.27 星期 :

安装和启动(mac)

安装-mac

brew (失败)
直接下载文件
配置环境变量(vim ~/.bash_profile; source ~/.base_profile)
启动:mongod –port 27017

安装位置:/usr/local/lib || 或者/usr/local/
(homebrew安装python也在这个位置.)
不放到local下,为了local里面的文件做区分

配置

新建配置文件(下载文件没有找到配置文件)
/usr/local/etc/mongo.conf
(redis,nginx (homebrew)安装也在这个位置)

1
2
3
4
5
6
7
8
9
10
11
12
port=27017
dbpath=/usr/local/var/mongodb-db
logpath=/usr/local/var/log/mongodb/mongo.log
logappend=true
fork=true
Auth=true

#启用日志文件,默认启用
# journal=true

#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=false

记得修改文件夹权限
sudo chmod -R 777 /usr/local/var/mongodb-db/
sudo chmod -R go+w /data/db // 取得读写权限

fork

作用:在前台启动Mongodb进程,如果Session窗口关闭,Mongodb进程也随之停止。
不过Mongodb同时还提供了一种后台Daemon方式启动,只需要加上一个”–fork”参数即可,
值得注意的是,用到了”–fork”参数就必须启用”–logpath”参数。如下所示

brew安装区别

brew安装后文件位置在
/usr/local/Cellar/pgk/1.12.3/*

启动-mac

1
2
3
4
5
6
7
mongod -f /usr/local/etc/mongo.conf ## mac
# mongod --config D:/program/mongodb/mongo.conf ## windows
## mongod其他参数:--auth, --dbpath, --logpath, --fork,
## ---master, --slave,-source
/usr/local/bin/mongod --master --slave -dbpath=/data/db/master -port=11536 --source 127.0.0.1:11537
## 进入mongo
mongo --port # -u,-p,

安装和启动(windows)

可以放到d盘(从c盘)等任意位置。
创建配置文件.mongod.conf

1
2
3
4
5
6
7
8
9
dbpath= D:\data\mongodb #数据库路径 
port= 27017 #端口号 默认为27017

journal= true #启用日志文件,默认启用
logpath= D:\var\log\mongod.log #日志输出文件路径
logappend= true #错误日志采用追加模式
quiet= true #这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false

# destination= file

启动

直接通过命令行启动
或者通过services 启动(services.mac).(需要设置好配置文件和安装 MongoDB服务)

需要注意

  1. 命令行必须要 用管理员方式启动
    可以设置mongod.exe 默认为管理员方式打开(通过文件属性 )
  2. 配置文件需要是绝对/全路径。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    ## 安装 MongoDB服务
    # 通过执行mongod.exe,使用--install选项来安装服务,使用--config选项来指定之前创建的配置文件。
    C:\mongodb\bin\mongod.exe --config "C:\mongodb\mongod.cfg" --install # --serviceName MongoDB
    # ./mongod.exe --config '/d/Server/mongodb-3.4.24/mongod.conf' --install
    ### 卸载
    C:\mongodb\bin\mongod.exe --remove --servicesName "MongoDB"

    ## 通过服务启动/关闭
    net start MongoDB 启动服务
    net stop MongoDB 关闭服务
    sc delete MongoDB 卸载服务

    ## 命令行下运行 MongoDB 服务器
    C:\mongodb\bin\mongod.exe --dbpath c:\data\db
    # ./mongod.exe -f '/d/Server/mongodb-3.4.24/mongod.conf'

添加auth权限

MongoDB加auth权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
## 初始化mongo用户
/usr/local/bin/mongod -f /etc/mongod.conf
mongo 127.0.0.1:27017

use admin
db.createUser({user:'admin',pwd:'admin',roles:[{role:"dbAdminAnyDatabase",db:"admin"},{role:"readWriteAnyDatabase",db:"admin"},{role:"userAdmin",db:"ares"},{role:"readWrite",db:"ares"},{role:"userAdmin",db:"ares"},{role:"readWrite",db:"ares"}]})

# db.createUser({ user: "root", pwd: "123456", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })

db.system.version.update({'_id':'authSchema'},{$set:{'currentVersion':3}})
db.system.version.find()

## auth方式重启mongo并创建xes_fe用户
lsof -i:27017 #// 查询mongod的PID
kill 9 PID #// 终止mongod
/usr/local/bin/mongod -f /etc/mongod.conf --auth #// 重启

mongo 127.0.0.1:27017

use admin
db.auth('admin', 'admin')

use ares
db.createUser({user:'root',pwd:'root',roles:[{role:'readWrite',db:'ares'}]})

后续服务端可以通过root 连接mongo数据库 进行操作

lsof -i:27027
ps -ef | grep mongo

数据库同步

MongoDB的几种同步方式

1、冷拷贝

这种方式对数据同步的完整性保持的最好,同时也非常方便,但是会影响服务器的使用。
首先关闭源数据库服务,之后使用远程复制命令将数据文件全量拷贝到目标服务器的数据目录下,再启动目标服务器。
如果不关闭源数据库,将会导致部分数据没有写到数据文件中,有很大概率目标服务器无法启动。

2、使用mongodump

mongodump是mongodb官方提供的导出工具,使用起来非常简单,一个例子如下

1
mongodump --host example.net --port 37017 -o /opt/backup/mongodump -d dbname -c collectionname

通过host port参数指定主机,通过o参数指定输出目录,通过d参数指定数据库,通过c参数指定集合
mongodump会自动建立备份目录,并按照数据库,集合划分目录与文件。

对应的,官方还提供了mongorestore程序来恢复备份,命令类似于mongodump。使用相同的参数指定主机,数据库,集合等信息,最后一个参数默认为用来恢复的数据文件目录即可。

还有几个需要注意的问题:
mognodb不会导出索引数据,所以在恢复后需要重新建立索引。
备份过程中所做的修改可能无法写入到备份文件中,如果需要同步这一些数据,可以使用–oplog参数记录过程中的修改日志,同时需要服务器为副本集或主从模式,否则数据库不会产生oplog。

3、增量备份

当数据库为副本集的主节点或主从模式的主节点时,将会生成操作日志,mongodb会使用操作日志对各节点中的数据进行增量同步。
利用这一点,我们也可以对集群之外的节点做同样的增量同步。

oplog数据存储在数据库的local数据库下。
主要字段如下:

有了这些信息,我们就可以用代码模拟mongodb的同步模式,对操作日志实现重播,从而实现数据的增量同步。
基本代码逻辑如下:

实操

带认证 --authenticationDatabase admin
MongoDB数据备份与恢复以及安全认证

1
2
mongorestore --db ares --host=127.0.0.1 --port=27027 --dir /Users/tal/working/202009231107/ares  --drop
mongorestore --db ares --host=127.0.0.1 --port=27027 --dir /Users/tal/working/202009231107/ares --drop -u admin -p=admin --authenticationDatabase admin

bosn

bson 和json

mongodump导出的是bson格式,是二进制形式,不过可以使用mongo自带的bsondump命令查看里面的数据,
而mongoexport导出的则是文本,可以是csv、json格式。

JSON可读性强但体积较大,BSON则是二进制文件,体积小但对人类几乎没有可读性。
JSON虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引,账户等其他基础信息。使用时应该注意。

在一些mongodb版本之间,BSON格式可能会随版本不同而有所不同,所以不同版本之间用mongodump/mongorestore可能不会成功,具体要看版本之间的兼容性。
当无法使用BSON进行跨版本的数据迁移的时候,使用JSON格式即mongoexport/mongoimport是一个可选项。跨版本的mongodump/mongorestore个人并不推荐,实在要做请先检查文档看两个版本是否兼容(大部分时候是的)。

其他问题

内存占用

mongod 占用了2.71g内存(共4g)

/usr/bin/mongod --config /etc/mongod.conf --fork --wiredTigerCacheSizeGB 8
关键在于 –wiredTigerCacheSizeGB 8 限制缓存使用内存大小为8GB,这样MongoDB使用的内存就是(8GB-1GB)* 50%

连接不成功

将配置的mongodb.conf中bindIP:127.0.0.1 改为0.0.0.0或将这一行注释掉
127.0.0.1只允许本地连接,不接受远程连接mongodb

远程连接超时

远程机器添加了限制。虽然安装上面的教程关闭了
安全组放行的端口是27017。 改成27017就好了

连接指定数据库:mongo 192.168.1.200:27017/test -u user -p password

配置文件语法错误

Error parsing YAML config file: yaml-cpp: error at line 3, column 9: illegal map value
老报错,没有解决
第三步查看配置文件中是否以Tab分隔字段,把Tab分割的字段改成以空格分割

配置文件

Configuration File Options

1
2
3
4
5
6
7
8
port=27027
dbpath=/usr/local/var/mongodb-db
logpath=/usr/local/var/log/mongodb/mongo.log
logappend=true
fork=true
auth=true

wiredTigerCacheSizeGB=4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
systemLog:
# verbosity: 0 #日志等级,0-5,默认0
# quiet: false #限制日志输出,
# traceAllExceptions: true #详细错误日志
# syslogFacility: user #记录到操作系统的日志级别,指定的值必须是操作系统支持的,并且要以--syslog启动
path: /Users/mhq/projects/db/mongo/logs/log.txt #日志路径。
logAppend: false #启动时,日志追加在已有日志文件内还是备份旧日志后,创建新文件记录日志, 默认false
logRotate: rename #rename/reopen。rename,重命名旧日志文件,创建新文件记录;reopen,重新打开旧日志记录,需logAppend为true
destination: file #日志输出方式。file/syslog,如果是file,需指定path,默认是输出到标准输出流中
timeStampFormat: iso8601-local #日志日期格式。ctime/iso8601-utc/iso8601-local, 默认iso8601-local
# component: #各组件的日志级别
# accessControl:
# verbosity: <int>
# command:
# verbosity: <int>

processManagement:
fork: true #以守护进程运行 默认false
# pidFilePath: <string> #PID 文件位置

net:
port: 27017 #监听端口,默认27017
bindIp: 127.0.0.1 #绑定监听的ip,deb和rpm包里有默认的配置文件(/etc/mongod.conf)里面默认配置为127.0.0.1,若不限制IP,务必确保认证安全,多个Ip用逗号分隔
maxIncomingConnections: 65536 #最大连接数,可接受的连接数还受限于操作系统配置的最大连接数
wireObjectCheck: true #校验客户端的请求,防止错误的或无效BSON插入,多层文档嵌套的对象会有轻微性能影响,默认true
ipv6: false #是否启用ipv6,3.0以上版本始终开启
unixDomainSocket: #unix socket监听,仅适用于基于unix的系统
enabled: false #默认true
pathPrefix: /tmp #路径前缀,默认/temp
filePermissions: 0700 #文件权限 默认0700
http: #警告 确保生产环境禁用HTTP status接口、REST API以及JSON API以防止数据暴露和漏洞攻击
enabled: false #是否启用HTTP接口、启用会增加网络暴露。3.2版本后停止使用HTTP interface
JSONPEnabled: false #JSONP的HTTP接口
RESTInterfaceEnabled: false #REST API接口
# ssl: #估计用不到,所以没有自己看
# sslOnNormalPorts: <boolean> # deprecated since 2.6
# mode: <string>
# PEMKeyFile: <string>
# PEMKeyPassword: <string>
# clusterFile: <string>
# clusterPassword: <string>
# CAFile: <string>
# CRLFile: <string>
# allowConnectionsWithoutCertificates: <boolean>
# allowInvalidCertificates: <boolean>
# allowInvalidHostnames: <boolean>
# disabledProtocols: <string>
# FIPSMode: <boolean>

security:
authorization: enabled # enabled/disabled #开启客户端认证
javascriptEnabled: true #启用或禁用服务器端JavaScript执行
# keyFile: <string> #密钥路径
# clusterAuthMode: <string> #集群认证方式
# enableEncryption: <boolean>
# encryptionCipherMode: <string>
# encryptionKeyFile: <string>
# kmip:
# keyIdentifier: <string>
# rotateMasterKey: <boolean>
# serverName: <string>
# port: <string>
# clientCertificateFile: <string>
# clientCertificatePassword: <string>
# serverCAFile: <string>
# sasl:
# hostName: <string>
# serviceName: <string>
# saslauthdSocketPath: <string>


# setParameter: #设置参数
# <parameter1>: <value1>
# <parameter2>: <value2>

storage:
dbPath: /Users/mhq/projects/db/mongo/test/ #数据库,默认/data/db,如果使用软件包管理安装的查看/etc/mongod.conf
indexBuildRetry: true #重启时,重建不完整的索引
# repairPath: <string> #--repair操作时的临时工作目录,默认为dbPath下的一个_tmp_repairDatabase_<num>的目录
journal:
enabled: true #启动journal,64位系统默认开启,32位默认关闭
# commitIntervalMs: <num> #journal操作的最大时间间隔,默认100或30
directoryPerDB: false #使用单独的目录来存储每个数据库的数据,默认false,如果需要更改,要备份数据,删除掉dbPath下的文件,重建后导入数据
# syncPeriodSecs: 60 #使用fsync来将数据写入磁盘的延迟时间量,建议使用默认值
engine: wiredTiger #存储引擎,mmapv1/wiredTiger/inMemory 默认wiredTiger
# mmapv1:
# preallocDataFiles: <boolean>
# nsSize: <int>
# quota:
# enforced: <boolean>
# maxFilesPerDB: <int>
# smallFiles: <boolean>
# journal:
# debugFlags: <int>
# commitIntervalMs: <num>
# wiredTiger:
# engineConfig:
# cacheSizeGB: <number> #缓存大小
# journalCompressor: <string> #数据压缩格式 none/snappy/zlib
# directoryForIndexes: <boolean> #将索引和集合存储在单独的子目录下,默认false
# collectionConfig:
# blockCompressor: <string> #集合数据压缩格式
# indexConfig:
# prefixCompression: <boolean> #启用索引的前缀压缩
# inMemory:
# engineConfig:
# inMemorySizeGB: <number>

operationProfiling: #性能分析
slowOpThresholdMs: 100 #认定为查询速度缓慢的时间阈值,超过该时间的查询即为缓慢查询,会被记录到日志中, 默认100
mode: off #operationProfiling模式 off/slowOp/all 默认off

# replication: #复制集相关
# oplogSizeMB: <int>
# replSetName: <string>
# secondaryIndexPrefetch: <string>
# enableMajorityReadConcern: <boolean>
# sharding: #集群分片相关
# clusterRole: <string>
# archiveMovedChunks: <boolean>

# auditLog:
# destination: <string>
# format: <string>
# path: <string>
# filter: <string>

# snmp:
# subagent: <boolean> #当设置为true,SNMP作为代理运行
# master: <boolean> #当设置为true,SNMP作为主服务器运行

# basisTech:
# rootDirectory: <string>

工具(可视化)

Studio 3T for MongoDB

`sudo spctl --master-disable` 需要2019.3.0版本,但是该版本的[下载地址](https://download.studio3t.com/studio-3t/mac/2019.3.0/Studio-3T.dmg)已经失效了 -->

Robomongo

Robomongo是一个开源的,基于Shell的MongoDB图形化客户端管理软件,主要由C++语言编写成,可运行在Windows,Linux和Mac OS X系统上.由于它内置了JavaScript引擎,所以在MongoShell中执行的任何操作都可以同样的在Robomongo的Shell中执行,最值得一提的是,它支持直接对数据以json方式浏览和修改,非常方便.

MongoDB Compass

https://www.mongodb.com/download-center/compass
连接mongod
mongodb://root:123456@127.0.0.1:27017/admin

mongodVU

web界面adminMongo

2.mongodb可视化界面的操作:
首先你需要在github上拉取一个项目,这个就是一个前端的界面,但是确实挺好用,下面就教大家怎么用,在自己本地一个文件夹中拉取github中的项目:

knowledge is no pay,reward is kindness
0%