文档: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
12port=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 | mongod -f /usr/local/etc/mongo.conf ## mac |
安装和启动(windows)
可以放到d盘(从c盘)等任意位置。
创建配置文件.mongod.conf1
2
3
4
5
6
7
8
9dbpath= 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服务)
需要注意:
- 命令行必须要 用管理员方式启动
可以设置mongod.exe 默认为管理员方式打开(通过文件属性 ) - 配置文件需要是绝对/全路径。
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
数据库同步
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
2mongorestore --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 Options1
2
3
4
5
6
7
8port=27027
dbpath=/usr/local/var/mongodb-db
logpath=/usr/local/var/log/mongodb/mongo.log
logappend=true
fork=true
auth=true
wiredTigerCacheSizeGB=4
1 | systemLog: |
工具(可视化)
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
连接mongodmongodb://root:123456@127.0.0.1:27017/admin
mongodVU
web界面adminMongo
2.mongodb可视化界面的操作:
首先你需要在github上拉取一个项目,这个就是一个前端的界面,但是确实挺好用,下面就教大家怎么用,在自己本地一个文件夹中拉取github中的项目: