版本:
OS:CentOS 6.6 64bit
DB:MongoDB企业版3.4.10
1、操作系统设置
--关闭防火墙
# chkconfig iptables off
--关闭SELINUX
# vi /etc/selinux/config SELINUX=disabled
重启服务器生效
--关闭透明大页(transparent_hugepage)
# /etc/rc.local
在文件末尾加入如下内容
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabled fi if test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never > /sys/kernel/mm/transparent_hugepage/defrag fi
重启服务器
--创建运行MongoDB的用户和组
# groupadd mongod # useradd -g mongod mongod # passwd mongod
--提高默认文件描述符和进程/线程数限制
# vi /etc/security/limits.conf mongod soft nproc 64000 mongod hard nproc 64000 mongod soft nofile 64000 mongod hard nofile 64000
2、安装MongoDB软件
--创建MongoDB二进制软件存放目录
# mkdir /mongodb
--上传MongoDB二进制软件/tmp目录下并解压到/mongodb目录下
# tar zxvf mongodb-linux-x86_64-enterprise-rhel62-3.4.10.tgz -C /mongodb
赋权限:
# chown -R mongod:mongod /mongodb
--修改全局环境变量
# vi /etc/profile export PATH=$PATH:/mongodb/mongodb-linux-x86_64-enterprise-rhel62-3.4.10/bin
使环境变量生效:
# source /etc/profile
或mongod用户下
.bash_profile
3、启动/登录/关闭MongoDB
--创建数据和日志存放目录
# mkdir -p /db/data # mkdir -p /db/log
赋权限:
# chown -R mongod:mongod /db
==启动MongoDB
# su - mongod $ mongod --dbpath=/db/data/ --logpath=/db/log/mongodb.log --logappend --fork
成功标识:
about to fork child process, waiting until server is ready for connections.
forked process: 1814
child process started successfully, parent exiting
注:
$ mongod --help
--dbpath:数据存放路径
--logpath:日志文件路径
--logappend:日志输出方式
--port:启用端口号
--fork:在后台运行
--auth:是否开启安全认证(默认不开启)
--bind_ip:以逗号分隔的ip地址列表,默认为所有本地ips。
==登录MongoDB
$ mongo MongoDB shell version v3.4.10 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.10 MongoDB Enterprise >
注:默认连接到test数据库
MongoDB Enterprise > db
test
==关闭MongoDB
--获取mongod的进程号PID
$ ps -ef | grep mongod
--关闭MongoDB
$ kill PID
原理:
> 关闭所有打开的连接
> 将内存数据强制刷新到磁盘
> 当前的操作执行完毕
> ...
> 安全停止
!!!切记kill -9
> 数据库直接关闭
> 数据丢失
> 数据文件损失
> 修复数据库(成本高,有风险)
4、使用MongoDB
(运行mongo启动shell,shell会在启动时自动连接MongoDB服务器,默认连接test数据库,并将这个数据库连接赋值给全局变量db,这个变量是MongoDB的主要入口点。shell是功能完备的Javascript解释器,可以运行任何Javascript程序。)
> x=100
100
> x/10
10
--查看当前连接的数据库服务器
> db.getMongo()
connection to 192.168.1.21:27017
--查看当前数据库版本
> db.version()
--显示当前数据库
> db
或
> db.getName()
--查看所有数据库
> show dbs
--切换数据库
> use test
--查看某一数据库下的所有集合
如app库:
> use app
> show collections
--创建数据库:当use的时候,系统就会自动创建一个数据库。如果use之后没有创建任何集合。系统就会删除这个数据库。
--删除数据库
如:test数据库
> use test
> db.dropDatabase()
--创建集合
如:在app数据库下创建集合a
方法1
> use app
> db.createCollection('a')
方法2:当插入一个文档的时候,一个集合就会自动创建。
> use app
> db.b.insert({username:"mongodb"})
--删除集合
> use app
> db.a.drop()
--重命名集合
//把a改名为c
> db.a.renameCollection("c")
--重命名数据库
虽然MongoDB没有renameDatabase的命令,但提供了renameCollection的命令,这个命令并不是仅仅能修改collection的名字,同时也可以修改database。
如:
> db.adminCommand({renameCollection: "test.a", to: "app.b"})
上述命令实现了将test数据库下的集合a,重命名为app数据库下的集合b,这个命令只修改元数据,开销很小,有了这个功能,要实现test重命名为app,只需要遍历test下所有的集合,重命名到app下,就实现了renameDatabase的功能。
--插入数据
> use app
> for(i=0;i<10000;i++){ db.log.insert({"uid":i,"name":"mongodb","age":18,"date":new Date()}); }
--查询集合中的记录数
> db.log.find() //查询所有记录
注:默认每页显示20条记录,当显示不下的的情况下,可以用it迭代命令查询下一页数据。
设置每页显示数据的大小:
> DBQuery.shellBatchSize=50; //每页显示50条记录
格式化输出:db.<collection>.find().pretty()
> db.log.findOne() //查看第1条记录
> db.log.count() //查询总的记录数
--删除集合中的记录数
> db.log.remove({}) //删除集合中所有记录
> db.log.distinct("name") //去重
==查看集合存储信息
> db.log.stats()
> db.log.dataSize() //集合中数据的原始大小
> db.log.totalIndexSize() //集合中索引数据的原始大小
> db.log.totalSize() //集合中索引+数据压缩存储之后的大 小
> db.log.storageSize() //集合中数据压缩存储的大小
查看具体方法代码:
app> show collections
log
app> db.log.dataSize
function () {
return this.stats().size;
}
app> db.log.totalIndexSize
function (verbose) {
var stats = this.stats();
if (verbose) {
for (var ns in stats.indexSizes) {
print(ns + " " + stats.indexSizes[ns]);
}
}
return stats.totalIndexSize;
}
app> db.log.totalSize
function () {
var total = this.storageSize();
var totalIndexSize = this.totalIndexSize();
if (totalIndexSize) {
total += totalIndexSize;
}
return total;
}
app> db.log.storageSize
function () {
return this.stats().storageSize;
}
--查看数据库状态
如:test数据库
> use test
> db.stats()
{
"db" : "test",
"collections" : 4,
"views" : 0,
"objects" : 10007,
"avgObjSize" : 80.1122214449885,
"dataSize" : 801683, "storageSize" : 274432, "numExtents" : 0, "indexes" : 3, "indexSize" : 196608, "ok" : 1 } 补: 1、自定义提示符 mongod home目录下编辑.mongorc.js隐藏文件 eg: $ cat .mongorc.js var compliment = ["attractjve","intelligent","like Batman"]; var index = Math.floor(Math.random()*3); print("Hello,you're looking particularly "+compliment[index]+" today!"); prompt = function() { return (new Date())+">"; }; prompt = function() { if (typeof db == 'undefined') { return '(nodb)> '; } try { db.runCommand({getLastError:1}); } catch (e) { print(e); } return db+"> "; }; 2、开启安全认证并使用用户名密码登录 (1)不开启安全认证创建超级管理员root --admin db.createUser( { user: "root", pwd: "grjin", roles: [ { role: "root", db: "admin" } ] } ) db.auth("root","grjin") (2)开启安全认证 --auth (3)重启MongoDB (4)完整登录方式 $ mongo -uroot -pgrjin 192.168.1.21:27017/admin 3、MongoDB标准配置文件 # su - mongod $ vi mongodb.conf systemLog: destination: file path: /db/log/mongod.log logAppend: true logRotate: rename processManagement: fork: true pidFilePath: /db/data/mongod.pid net: bindIp: 192.168.1.21 port: 27018 http: enabled: false maxIncomingConnections: 1000 operationProfiling: mode: slowOp slowOpThresholdMs: 100 security: authorization: enabled storage: dbPath: /db/data wiredTiger: engineConfig: cacheSizeGB: 1 directoryForIndexes: true collectionConfig: blockCompressor: zlib indexConfig: prefixCompression: true directoryPerDB: true $ mongod -f mongodb.conf //启动MongoDB $ mongod -f mongodb.conf --shutdown //关闭MongoDB