介绍
MongoDB: 是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应用提供可扩展的高性能数据存储解决方案。是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系型数据库的。它支持的数据结构非常松散,会将数据存储为一个文档,数据结构由键值对(key=>value)组成,是类似于json的bson格式,字段值可以包含其它文档、数组和文档数组,因此可以存储比较复杂的数据类型。
安装
二进制安装
官网下载
以下为自动安装脚本
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
| #!/bin/bash
workdir=/data mongodb_version=mongodb-linux-x86_64-3.6.14 [ -e $workdir ] || mkdir $workdir mongodb_dir=$workdir/$mongodb_version
yum -y install wget wget https://fastdl.mongodb.org/linux/$mongodb_version.tgz
tar xf $mongodb_version.tgz -C /data cd $mongodb_dir mkdir {data,logs}
cat > mongodb.conf <<EOF # 数据库路径 dbpath=$mongodb_dir/data
# 日志输出文件路径 logpath=$mongodb_dir/logs/mongodb.log
# 错误日志采用追加模式 logappend=true
# 启用日志文件,默认启用 journal=true
# 这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false quiet=true
# 端口号 默认为27017 port=27017
# 允许远程访问 bind_ip=0.0.0.0
# 开启子进程 fork=true
# 为每一个数据库按照数据库名建立文件夹存放 directoryperdb=true
#开启认证,必选先添加用户 #auth=true EOF
$mongodb_dir/bin/mongod -f $mongodb_dir/mongodb.conf
|
副本集安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| version: "2" services:
mongo-pre1: hostname: mongo-pre1 container_name: mongo-pre1 image: mongo:4.0.19 ports: - 8635:8635 volumes: - '/data4/mongo/mongo-pre1:/data/db' restart: always command: "--bind_ip_all --replSet rs0 --port 8635" mongo-pre2: hostname: mongo-pre2 container_name: mongo-pre2 image: mongo:4.0.19 ports: - 8636:8636 volumes: - '/data4/mongo/mongo-pre2:/data/db' restart: always command: "--bind_ip_all --replSet rs0 --port 8636"
|
登录mongo
1 2 3 4 5
| docker exec -it mongo-pre1 bash
mongo --port 8635
|
主从配置
1 2 3 4 5 6
| var config={ _id:"rs0", members:[ {_id:0,host:"你服务器ip:8635"}, {_id:1,host:"你服务器ip:8636"} ]};
|
执行配置
启动脚本
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
| #!/bin/bash
dir=/data/mongodb-linux-x86_64-3.6.14 start() { $dir/bin/mongod --config $dir/mongodb.conf } stop() { $dir/bin/mongod --config $dir/mongodb.conf --shutdown }
case "$1" in start) start ;; stop) stop ;; restart) stop start ;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 esac
|
开机自启动
把以上启动脚本存为mongodb
1 2 3 4 5
| mv mongodb /etc/rc.d/init.d/ chmod +x /etc/rc.d/init.d/mongodb chkconfig --add mongodb chkconfig mongodb on chkconfig --list
|
备份和恢复
备份整个库
1 2 3 4 5 6 7 8 9 10 11
| 例如: mongodump -h localhost -d users -o /root/mongdbbak/
-h: MongDB所在服务器地址,例如:127.0.0.1或localhost,当然也可以指定端口号:127.0.0.1:27017
-d: 需要备份的数据库实例名,例如:users
-o: 指定备份的数据存放的目录位置,例如:/root/mongdbbak/,当然该目录需要提前建立,在备份完成后,系统自动在/root/mongdbbak/目录下建立一个users目录,这个目录里面存放该数据库实例的备份数据。数据形式是以JSON的格式文件存储。
|
恢复整个库
1 2 3 4 5 6 7 8 9 10 11
| 例如: mongorestore -h localhost -d users --dir /root/mongdbbak/users
--host <:port>, -h <:port>: MongoDB所在服务器地址,默认为:localhost:27017
-d : 需要恢复的数据库实例名,例如:users,当然这个名称也可以和备份时候的不一样,比如user2
--dir: 指定备份的目录。
|
导出集合
1 2 3 4 5 6 7 8 9 10
| 例如: mongoexport -d mydb -c promotionConfiguration -o promotionConfiguration.json
-h :数据库地址,MongoDB 服务器所在的 IP 与 端口,如 localhost:27017
-d :指明使用的数据库实例,如 test
-c 指明要导出的集合,如 demo
-o 指明要导出的文件名,demo.json,文件类型支持txt、xls、docs 等等
|
导入集合
1 2 3 4 5 6 7 8
| 例如: mongoimport -d mydb -c u_vip_card_item --type=json --file u_vip_card_item.json
-h : 数据库地址,MongoDB 服务器所在的 IP 与 端口,如 localhost:27017
-d :指明使用的库,指明使用的数据库实例,如 test
-c :指明要导入的集合,如 demo可以和导出时不一致,自定义即可,不存在时会直接创建。
|
常用命令
关闭mongodb
mongod –shutdown –dbpath /database/mongodb/data/
或
use admin;
db.shutdownServer();
查看库大小
单位B查看
db.stats();
单位M查看
db.stats(1048576);
单位G查看
db.stats(1073741824);
查看表大小(单位字节)
db.tables.stats()
查看sites集合索引
db.sites.getIndexes()
查看当前数据库的所有索引
db.system.indexes.find()
查看全部数据库
show dbs;
显示当前数据库中的集合(类似关系数据库中的表)
show tables;
查看当前数据库的用户信息
show users;
切换数据库跟mysql一样 (如果没用库,则创建,需要有数据才能生成库)
use ;
查看当前所在数据库
db;
db.getName();
对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据)
db.foo.find();
对于当前数据库中的foo集合进行查找 (条件是数据中有一个属性叫a,且a的值为1)
db.foo.find( { a : 1 } );
创建表
db.test.insert({“_id”:”520”,”name”:”xiaoming”})
创建用户
use admin
db.createUser({user:”xiaoming”,pwd:”123456”,roles:[{role:”userAdmin”,db:”test”}]})
删除用户
db.removeUser(“userName”);
显示当前所有用户
show users;
删除当前所在库
db.dropDatabase();
查看当前连接数和最大连接数
db.serverStatus().connections
实时查运行状态
mongostat
查看压力
mongotop
查看所有客户端连接信息
1 2 3 4 5
| db.currentOp(true).inprog.forEach( function(opDoc){ printjson(opDoc) } )
|