CentOS7安装MongoDB及基础操作
2018-04-09 09:18
260 查看
安装环境说明
系统环境说明[root@master ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@master ~]# uname -r 3.10.0-693.el7.x86_64 [root@master ~]# hostname -I 192.168.174.200 192.168.122.1软件版本
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.3.tgz
安装工作
创建用户groupadd -g 800 mongodb useradd -u 806 -g mongodb mongodb修改密码
echo 123456 |passwd --stdin mongodb创建目录
mkdir -p /usr/local/mongodb/27017/ &&\ cd /usr/local/mongodb/27017/ &&\ mkdir -p bin conf log data下载程序
cd /usr/local/mongodb/27017/ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.3.tgz解压程序
tar xf mongodb-linux-x86_64-rhel70-3.6.3.tgz cd mongodb-linux-x86_64-rhel70-3.6.3/bin/ &&\ cp * /usr/local/mongodb/27017/bin修改程序属性
chown -R mongodb:mongodb /usr/local/mongodb/27017设置环境变量
su - mongod cat >> .bash_profile <<'EOF' export PATH=/usr/local/mongodb/27017/bin:$PATH EOF source .bashprofile
如提示.bashprofile不存在,执行vim .bashprofile即可至此,安装工作完成
管理MongoDB
启动:mongod --dbpath=/usr/local/mongodb/27017/data --logpath=/usr/local/mongodb/27017/log/mongodb.log --port=27017 --logappend 关闭:mongod --shutdown --dbpath=/usr/local/mongodb/27017/data --logpath=/usr/local/mongodb/27017/log/mongodb.log --port=27017 --logappend参数说明
参数 | 参数说明 |
--dbpath | 数据存放路径 |
--logpath | 日志文件路径 |
--logappend | 日志输出方式 |
--port | 启用端口号 |
--fork | 在后台运行 |
--auth | 是否需要验证权限登录(用户名和密码) |
--bind_ip | 限制访问的ip |
--shutdown | 关闭数据库 |
--logpath 日志文件路径 --master 指定为主机器 --slave 指定为从机器 --source 指定主机器的IP地址 --pologSize 指定日志文件大小不超过64M.因为resync是非常操作量大且耗时,最好通过设置一个足够大的oplogSize来避免resync(默认的 oplog大小是空闲磁盘大小的5%)。 --logappend 日志文件末尾添加 --port 启用端口号 --fork 在后台运行 --only 指定只复制哪一个数据库 --slavedelay 指从复制检测的时间间隔 --auth 是否需要验证权限登录(用户名和密码) -h [ --help ] show this usage information --version show version information -f [ --config ] arg configuration file specifying additional options --port arg specify port number --bind_ip arg local ip address to bind listener - all local ips bound by default -v [ --verbose ] be more verbose (include multiple times for more verbosity e.g. -vvvvv) --dbpath arg (=/data/db/) directory for datafiles 指定数据存放目录 --quiet quieter output 静默模式 --logpath arg file to send all output to instead of stdout 指定日志存放目录 --logappend appnd to logpath instead of over-writing 指定日志是以追加还是以覆盖的方式写入日志文件 --fork fork server process 以创建子进程的方式运行 --cpu periodically show cpu and iowait utilization 周期性的显示cpu和io的使用情况 --noauth run without security 无认证模式运行 --auth run with security 认证模式运行 --objcheck inspect client data for validity on receipt 检查客户端输入数据的有效性检查 --quota enable db quota management 开始数据库配额的管理 --quotaFiles arg number of files allower per db, requires --quota 规定每个数据库允许的文件数 --appsrvpath arg root directory for the babble app server --nocursors diagnostic/debugging option 调试诊断选项 --nohints ignore query hints 忽略查询命中率 --nohttpinterface disable http interface 关闭http接口,默认是28017 --noscripting disable scripting engine 关闭脚本引擎 --noprealloc disable data file preallocation 关闭数据库文件大小预分配 --smallfiles use a smaller default file size 使用较小的默认文件大小 --nssize arg (=16) .ns file size (in MB) for new databases 新数据库ns文件的默认大小 --diaglog arg 0=off 1=W 2=R 3=both 7=W+some reads 提供的方式,是只读,只写,还是读写都行,还是主要写+部分的读模式 --sysinfo print some diagnostic system information 打印系统诊断信息 --upgrade upgrade db if needed 如果需要就更新数据库 --repair run repair on all dbs 修复所有的数据库 --notablescan do not allow table scans 不运行表扫描 --syncdelay arg (=60) seconds between disk syncs (0 for never) 系统同步刷新磁盘的时间,默认是60s Replication options: --master master mode 主复制模式 --slave slave mode 从复制模式 --source arg when slave: specify master as <server:port> 当为从时,指定主的地址和端口 --only arg when slave: specify a single database to replicate 当为从时,指定需要从主复制的单一库 --pairwith arg address of server to pair with --arbiter arg address of arbiter server 仲裁服务器,在主主中和pair中用到 --autoresync automatically resync if slave data is stale 自动同步从的数据 --oplogSize arg size limit (in MB) for op log 指定操作日志的大小 --opIdMem arg size limit (in bytes) for in memory storage of op ids指定存储操作日志的内存大小 Sharding options: --configsvr declare this is a config db of a cluster 指定shard中的配置服务器 --shardsvr declare this is a shard db of a cluster 指定shard服务器登入数据库
mongo使用配置文件方式管理数据库
cd /usr/local/mongodb/27017/conf vim mongodb.conf dbpath=/usr/local/mongodb/27017/data logpath=/usr/local/mongodb/27017/log/mongodb.log port=27017 logappend=1使用配置文件的启动和关闭
启动:mongod -f mongodb.conf 关闭:mongod -f mongodb.conf --shutdown使用配置文件后台运行
mongod -f mongodb.conf &[b]3.X 版本官方推荐使用YAML格式配置文件[/b]
vim mongodb.yaml systemLog: destination: file path: "/usr/local/mongodb/27017/log/mongodb.log" logAppend: true storage: journal: enabled: true dbPath: "/usr/local/mongodb/27017/data" net: port: 27017
启动:mongod -f mongodb.yaml
后台:mongod -f mongodb.yaml &
关闭:mongod -f mongodb.yaml --shutdown在数据库中关闭数据库
mongo use admin db.shutdownServer()
注: mongod进程收到SIGINT信号或者SIGTERM信号,会做一些处理 > 关闭所有打开的连接 > 将内存数据强制刷新到磁盘 > 当前的操作执行完毕 > 安全停止 切忌kill -9 数据库直接关闭,数据丢失,数据文件损失,修复数据库(成本高,有风险) 使用kill命令关闭进程 $ kill -2 PID 原理:-2表示向mongod进程发送SIGINT信号。 或 $ kill -4 PID 原理:-4表示向mognod进程发送SIGTERM信号。使用脚本管理服务
vim /etc/init.d/mongod
#!/bin/bash # #MongoDB服务管理 ################################# MONGODIR=/usr/local/mongodb/27017/ MONGOD=$MONGODIR/bin/mongod MONGOCONF=$MONGODIR/conf/mongodb.conf InfoFile=/tmp/start.mongo . /etc/init.d/functions status(){ PID=`awk 'NR==2{print $NF}' $InfoFile` Run_Num=`ps -p $PID|wc -l` if [ $Run_Num -eq 2 ]; then echo "MongoDB is running" else echo "MongoDB is shutdown" return 3 fi } start() { status &>/dev/null if [ $? -ne 3 ];then action "启动MongoDB,服务运行中..." /bin/false exit 2 fi sudo su - mongodb -c "$MONGOD -f $MONGOCONF" >$InfoFile 2>/dev/null if [ $? -eq 0 ];then action "启动MongoDB" /bin/true else action "启动MongoDB" /bin/false fi } stop() { sudo su - mongodb -c "$MONGOD -f $MONGOCONF --shutdown" &>/dev/null if [ $? -eq 0 ];then action "停止MongoDB" /bin/true else action "停止MongoDB" /bin/false fi } case "$1" in start) start ;; stop) stop ;; restart) stop sleep 2 start ;; status) status ;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 1 esac
MongDB基础操作
查询操作
连接数据库[root@master ~]# mongo 192.168.174.200:27017/admin MongoDB shell version v3.4.13 connecting to: mongodb://192.168.174.200:27017/admin MongoDB server version: 3.4.13 Server has startup warnings: 2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten] 2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. 2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. 2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten] 2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten] 2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. 2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never' 2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten] 2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. 2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never' 2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten] > db admin查看数据库版本
> db.version() 3.4.13 >切换数据库
> use test; switched to db test > db test显示当前数据库
> db test > db.getName(); test查看所有数据库
> show dbs; admin 0.000GB local 0.000GB > show databases; admin 0.000GB local 0.000GB查看当前数据库机器的连接地址
> db.getMongo() connection to 192.168.174.200:27017
管理操作
创建数据库> use mydb; switched to db mydb说明创建数据库:
当use的时候,系统就会自动创建一个数据库。
如果use之后没有创建任何集合。系统就会删除这个数据库。
> show dbs; admin 0.000GB local 0.000GB mydb 0.000GB
> use mydbs; switched to db mydbs > db.dropDatabase() { "ok" : 1 }
删除数据库
> use mydbs; switched to db mydbs > db.dropDatabase() { "ok" : 1 }说明删除数据库:
如果没有选择任何数据库,会删除默认的test数据库创建集合方法一:> db.createCollection('a')
{ "ok" : 1 }
> db.createCollection('b')
{ "ok" : 1 }查看集合> show collections
a
b
> show getCollectionNames()
2018-04-09T16:41:33.145+0800 E QUERY [thread1] Error: don't know how to show [getCollectionNames()] :
shellHelper.show@src/mongo/shell/utils.js:919:11
shellHelper@src/mongo/shell/utils.js:672:15
@(shellhelp2):1:1
> db.getCollectionNames();
[ "a", "b" ]
> 方法二:说明:插入一个文档的时候,一个集合就会自动创建。
> db.c.insert({name:'test1','age':123}) WriteResult({ "nInserted" : 1 }) > db.c.insert({address:'haerbin'}) WriteResult({ "nInserted" : 1 })查看集合内容> db.c.find()
{ "_id" : ObjectId("5acb28b94a893f4e9544610e"), "name" : "test1", "age" : 123 }
{ "_id" : ObjectId("5acb29444a893f4e9544610f"), "address" : "haerbin" }
> 重命名集合> db.c.renameCollection("d")
{ "ok" : 1 }
> show collections;
a
b
d
> 删除集合> db.a.drop();
true
> show collections;
b
d
> 批量插入500行数据> for(i=0;i<10000;i++){ db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new Date()}); }
WriteResult({ "nInserted" : 1 })
> db.log.find();注:默认每页显示20条记录,当显示不下的的情况下,可以用it迭代命令查询下一页数据。
> DBQuery.shellBatchSize=50; # 每页显示50条记录
50
> db.log.findOne() # 查看第1条记录
> db.log.count() # 查询总的记录数
> db.log.find({uid:100}); # 查询UUID为100的数据
MongoBD中用户管理
用户权限说明权限 | 说明 |
Read | 允许用户读取指定数据库 |
readWrite | 允许用户读写指定数据库 |
dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile |
userAdmin | 允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 |
clusterAdmin | 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 |
readAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读权限 |
readWriteAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读写权限 |
userAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 |
dbAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 |
root | 只在admin数据库中可用。超级账号,超级权限 |
user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>",
db: "<database>" } | "<role>",
...
]
}语法说明user字段:用户的名字;
pwd字段:用户的密码;
cusomData字段:为任意内容,例如可以为用户全名介绍;
roles字段:指定用户的角色,可以用一个空数组给新用户设定空角色;
roles 字段:可以指定内置角色和用户定义的角色。创建管理员用户进入管理数据库use admin创建管理员用户,root权限db.createUser(
{
user: "root",
pwd: "root",
roles: [ { role: "root", db: "admin" } ]
}
) 注意创建管理员角色用户的时候,必须到admin下创建。
删除的时候也要到相应的库下操作。查看创建完用户的collections > show tables;
system.users # 用户存放位置
system.version查看创建的管理员用户
> show users { "_id" : "admin.root", "user" : "root", "db" : "admin", "roles" : [ { "role" : "root", "db" : "admin" } ] } >验证用户是否可用> db.auth("root","root")
1 # 返回 1 即为成功创建完用户后在配置文件中开启用户验证cat >>/usr/local/mongodb/27017/conf/mongodb.yaml<<-'EOF'
security:
authorization: enabled
EOF
SQL与MongoDB语言对比
SQL语言与CRUD语言对照SQL Schema Statements | MongoDB Schema Statements |
CREATE TABLE users ( id MEDIUMINT NOT NULL AUTO_INCREMENT, user_id Varchar(30), age Number, status char(1), PRIMARY KEY (id) ) | Implicitly created on first insert() operation. The primary key _idis automatically added if _id field is not specified. db.users.insert( { user_id: "abc123", age: 55, status: "A" } ) However, you can also explicitly create a collection: db.createCollection("users") |
ALTER TABLE users ADD join_date DATETIME | 在Collection 级没有数据结构概念。然而在 document级,可以通过$set在 update操作添加列到文档中。 db.users.update( { }, { $set: { join_date: new Date() } }, { multi: true } ) |
ALTER TABLE users DROP COLUMN join_date | 在Collection 级没有数据结构概念。然而在 document级,可以通过$unset 在update操作从文档中删除列。 db.users.update( { }, { $unset: { join_date: "" } }, { multi: true } ) |
CREATE INDEX idx_user_id_asc ON users(user_id) | db.users.createIndex( { user_id: 1 } ) |
CREATE INDEX idx_user_id_asc_age_desc ON users(user_id, age DESC) | db.users.createIndex( { user_id: 1, age: -1 } ) |
DROP TABLE users | db.users.drop() |
SQL Statements | MongoDB Statements |
INSERT INTO users(user_id, age status) VALUES ("bcd001", 45, "A") | db.users.insert( { user_id: "bcd001", age: 45, status: "A" } ) |
DELETE FROM users WHERE status = "D" | db.users.remove( { status: "D" } ) |
DELETE FROM users | db.users.remove({}) |
UPDATE users SET status = "C" WHERE age > 25 | db.users.update( { age: { $gt: 25 } }, { $set: { status: "C" } }, { multi: true } ) |
UPDATE users SET age = age + 3 WHERE status = "A" | db.users.update( { status: "A" } , { $inc: { age: 3 } }, { multi: true } ) |
SQL SELECT Statements | MongoDB find() Statements |
SELECT * FROM users | db.users.find() |
SELECT id, user_id, status FROM users | db.users.find( { }, { user_id: 1, status: 1, _id: 0 } ) |
SELECT user_id, status FROM users | db.users.find( { }, { user_id: 1, status: 1 } ) |
SELECT * FROM users WHERE status = "A" | db.users.find( { status: "A" } ) |
SELECT user_id, status FROM users WHERE status = "A" | db.users.find( { status: "A" }, { user_id: 1, status: 1, _id: 0 } ) |
相关文章推荐
- 安装使用Mongoose配合Node.js操作MongoDB的基础教程
- MongoDB的使用学习之(三)安装MongoDB以及一些基础操作
- 【mongoDB基础篇①】安装与常用操作语句
- 安装使用Mongoose配合Node.js操作MongoDB的基础教程
- 分针网—每日分享:安装使用Mongoose配合Node.js操作MongoDB的基础教程
- PHP实现对MongoDB的基础操作
- CentOs7 docker 安装与基本操作
- centos7 安装mongodb 3.6
- centos7下安装Node.js MongoDB Nginx
- MongoDB在windows安装以及基本命令操作
- centos7上安装mongodb和mongodb扩展包
- windows下安装使用Mongodb操作记录
- Octave 基础操作及解决安装绘图工具gnuplot时出现unknown terminal错误
- MongDB基础学习(七)—— 【MongoDB for Java】Java操作MongoDB
- php操作MongoDB基础教程(连接、新增、修改、删除、查询)
- .net 操作MongoDB 基础
- CentOS7安装MongoDB
- MongoDB---基础操作
- Linux使用基础一:安装与常用的操作使用命令
- centos7 mongodb3.4 安装