(一)下载安装
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz
tar xvf -C /opt/app mongodb-linux-x86_64-3.0.6.tgz
cd /opt/app && mv mongodb-linux-x86_64-3.0.6 mongo3.0
mkdir /opt/app/mongo3.0/{data,etc,logs}
(二)配置启动
cat /opt/app/mongodb3/etc/mongodb.conf
##
port = 10000
bind_ip = 172.16.0.214
maxConns = 100
logpath=/opt/app/mongodb3/logs/mongodb.log
logappend=true
pidfilepath = /opt/app/mongodb3/mongo.pid
fork = true
dbpath=/opt/app/mongodb3/data
auth=true
replSet=rs0
keyFile = /opt/app/mongodb3/etc/key
------------------------------------------
echo "secrets" > /opt/app/mongodb3/etc/key && chmod 600 /opt/app/mongodb3/etc/key
启动:numactl --interleave=all /opt/app/mongodb3/bin/mongod -f /opt/app/mongodb3/etc/mongodb.conf
关闭:/opt/app/mongodb3/bin/mongod -f /opt/app/mongodb3/etc/mongodb.conf --shutdown
(三)创建系统管理用户( 非auth非replSet模式启动mongodb)
>use admin
>db.createUser({user:"dba",pwd:"dba",roles:[{role:"root",db:"admin"}]})
>db.auth("dba","dba")
Built-In Roles(内置角色):
1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 内部角色:__system
PS:https://docs.mongodb.org/manual/reference/built-in-roles/
(四)配置副本集
1、连接DB:/opt/app/mongodb3/bin/mongo --host 172.16.0.214:10000 -udba -pdba admin
2、初始化
>rsconf = {_id:"rs0",members:[{_id:0,host:"172.16.0.214:10000"}]}
>rs.initiate( rsconf )
3、添加成员
>rs.add("172.16.0.214:20000")
4、删除成员
>rs.remove("172.16.0.214:30000")
5、查看配置
> rs.config()
(五)数据备份、恢复与迁移管理
1、备份全部数据库
mkdir testbak
cd testbak
mongodump
说明:默认备份目录及数据文件格式为./dump/[databasename]/[collectionname].bson
2、备份指定数据库
mongodump -d pagedb
说明:备份数据库pagedb中的数据。
3、备份一个数据库中的某个集合
mongodump -d pagedb -c page
说明:备份数据库pagedb的page集合。
4、恢复全部数据库
cd testbak
mongorestore --drop
说明:将备份的所有数据库恢复到数据库,--drop指定恢复数据之前删除原来数据库数据,否则会造成回复后的数据中数据重复。
5、恢复某个数据库的数据
cd testbak
mongorestore -d pagedb --drop
说明:将备份的pagedb的数据恢复到数据库。
6、恢复某个数据库的某个集合的数据
cd testbak
mongorestore -d pagedb -c page --drop
说明:将备份的pagedb的的page集合的数据恢复到数据库。
7、向MongoDB导入数据
mongoimport -d pagedb -c page --type csv --headerline --drop < csvORtsvFile.csv
说明:将文件csvORtsvFile.csv的数据导入到pagedb数据库的page集合中,使用cvs或tsv文件的列名作为集合的列名。需要注意的是,使用--headerline选项时,只支持csv和tsv文件。
--type支持的类型有三个:csv、tsv、json
8、从向MongoDB导出数据
mongoexport -d pagedb -c page -q {} -f _id,title,url,spiderName,pubDate --csv > pages.csv
说明:将pagedb数据库中page集合的数据导出到pages.csv文件,其中各选项含义:
-f 指定cvs列名为_id,title,url,spiderName,pubDate
-q 指定查询条件
(六)基本命令
1、show dbs
显示当前数据库服务器上的数据库
2、use pagedb
切换到指定数据库pagedb的上下文,可以在此上下文中管理pagedb数据库以及其中的集合等
3、show collections
显示数据库中所有的集合(collection)
4、db.serverStatus()
5、查询指定数据库统计信息
use fragment
db.stats()
6、查询指定数据库包含的集合名称列表
db.getCollectionNames()
基本DDL和DML
1、创建数据库
use dbname系统会自动延迟创建该数据库
2、删除数据库
直接使用db.dropDatabase()即可删除数据库。
3、创建集合
可以使用命令db.createCollection(name, { size : ..., capped : ..., max : ... } )创建集合,示例如下所示:
>db.createCollection('replicationColletion', {'capped':true, 'size':10240, 'max':17855200})
4、删除集合
删除集合,可以执行db.mycoll.drop()。
5、插入更新记录
直接使用集合的save方法,如下所示:
>db.storeCollection.save({'version':'3.5', 'segment':'e3ol6'})
6、查询一条记录
使用findOne()函数,参数为查询条件,可选,系统会随机查询获取到满足条件的一条记录(如果存在查询结果数量大于等于1)
> db.storeCollection.findOne({'version':'3.5'})
7、查询多条记录
使用find()函数,参数指定查询条件,不指定条件则查询全部记录。
8、删除记录
使用集合的remove()方法
9、创建索引
可以使用集合的ensureIndex(keypattern[,options])方法,示例如下所示:
> use pagedb
switched to db pagedb
> db.page.ensureIndex({'title':1, 'url':-1})
上述,ensureIndex方法参数中,数字1表示升序,-1表示降序。
使用db.system.indexes.find()可以查询全部索引。
10、查询索引
我们为集合建立的索引,那么可以通过集合的getIndexes()方法实现查询
11、删除索引
删除索引给出了两个方法:
db.mycoll.dropIndex(name)
db.mycoll.dropIndexes()
第一个通过指定索引名称,第二个删除指定集合的全部索引。
12、索引重建
可以通过集合的reIndex()方法进行索引的重建
13、统计集合记录数
use fragment
db.baseSe.count()
统计结果,如下所示:
> use fragment
switched to db fragment
> db.baseSe.count()
36749
上述统计了数据库fragment的baseSe集合中记录数。
14、查询并统计结果记录数
use fragment
db.baseSe.find().count()
find()可以提供查询参数,然后查询并统计结果
15、查询指定数据库的集合当前可用的存储空间
use fragment
> db.baseSe.storageSize()
142564096
16、查询指定数据库的集合分配的存储空间
> db.baseSe.totalSize()
144096000
上述查询结果中,包括为集合(数据及其索引存储)分配的存储空间。