Mongodb基础

来自linux中国网wiki
跳到导航 跳到搜索

install

yum or apt

MongoDB国内apt yum镜像使用帮助

Docker mongo

install in Docker

bin

wget  -c   https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.0.tgz
在国内 可能有点慢 可以放国个下载再拉回来 什么的 

mv mongodb-linux-x86_64-3.2.0/  /data/apps/mongodb
echo 'export PATH=$PATH:/data/apps/mongodb/bin/' >> /etc/profile

or 

cat >> /etc/profile <<EOF
export PATH=$PATH:/data/apps/mongodb/bin
EOF

source /etc/profile 

测试安装

portX 可选的指定端口,如果不填,默认为27017

新建一个目录data存放mongodb数据:
mkdir /data/apps/mongodb/data/

用以下其中一个命令启动mongod:
mongod --dbpath /data/apps/mongodb/data/
mongod --dbpath /data/apps/mongodb/data --auth 
mongod --dbpath /data/apps/mongodb/data     --config /etc/mongodb.conf    --auth

这时mongod已经启动,重新打开一个终端, 键入mongo进入交互程序:
$> mongo
> show dbs
...数据库列表



3. 导入初始数据
leanote初始数据存放在 leanote/mongodb_backup/leanote_install_data中。

root@mypi3b:/data/apps# ls leanote/mongodb_backup/leanote_install_data/
albums.bson		     has_share_notes.bson		    share_notebooks.bson
albums.metadata.json	     has_share_notes.metadata.json	    share_notebooks.metadata.json

 cat   leanote/mongodb_backup/leanote_install_data/albums.metadata.json 
{"indexes":[{"v":1,"key":{"_id":1},"name":"_id_","ns":"leanote_bin_test.albums"},{"v":1,"key":{"UserId":1},"name":"UserId_1","ns":"leanote_bin_test.albums","background":true}]}
 
打开终端, 输入以下命令导入数据。
$> mongorestore -h localhost -d leanote --dir leanote/mongodb_backup/leanote_install_data/


$> mongo
> show dbs # 查看数据库
leanote	0.203125GB
local	0.078125GB
> use leanote # 切换到leanote
switched to db leanote
> show collections # 查看表
files
has_share_notes
note_content_histories
note_contents

MongoDB安全认证

常用命令

MongoDB - 连接


evan@myxps:~/downloads/mongosh-1.0.7-linux-x64/bin$ ./mongosh  --host 192.168.10.120  --port 27018
Current Mongosh Log ID:	614beac584f560bae1d83f92
Connecting to:		mongodb://192.168.10.120:27018/?directConnection=true








> show dbs #显示数据库列表 
> show collections #显示当前数据库中的集合(类似关系数据库中的表)
> show users #显示用户
> use <db name> #切换当前数据库,如果数据库不存在则创建数据库。 
> db.help() #显示数据库操作命令,里面有很多的命令 
> db.foo.help() #显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令 
> db.foo.find() #对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据) 
> db.foo.find( { a : 1 } ) #对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1
> db.dropDatabase() #删除当前使用数据库
> db.cloneDatabase("127.0.0.1") #将指定机器上的数据库的数据克隆到当前数据库
> db.copyDatabase("mydb", "temp", "127.0.0.1") #将本机的mydb的数据复制到temp数据库中
> db.repairDatabase() #修复当前数据库
> db.getName() #查看当前使用的数据库,也可以直接用db
> db.stats() #显示当前db状态
> db.version() #当前db版本
> db.getMongo() #查看当前db的链接机器地址
> db.serverStatus() #查看数据库服务器的状态


use djs_kuafu_4; 建库

db.addUser("name","passwd");授权

MongoDB 删除数据库的语法格式如下:
use 数据库名;
db.dropDatabase()
删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名。
实例
以下实例我们删除了数据库 runoob。
首先,查看所有数据库:
> show dbsuse 



mongodb 常用命令
查看所有数据库
show dbs
查看当前选择的库
db
查看库下的所有集合
show tables
show collections
删除库(这种方式删除数据目录还会有数据文件夹的)
use dbname
db.dropDatabase()
用这个方式可以清理文件下的内容,然后删掉目录即可
use s1
db.dropDatabase()
db.repairDatabase()
删除集合
db.mytable.drop()
添加用户
use dbname
db.addUser('admin','123456')
更改密码
db.addUser("admin","a123456")
删除用户
db.system.users.remove({admin:"a123456"})
或者
db.removeUser('admin')
用户授权db.createUser({user:"su",pwd:"fenggu123$%^",roles:[ { role:"root", db:"admin" } ] });
db.auth('admin','a123456') ???????
查看用户列表
db.system.users.find()
查看所有用户
show users
关闭服务
> use admin
switched to db admin

db.shutdownServer();

mongod  --shutdown  --dbpath /database/mongodb/data/

查询集合
db.users.find()
条件查询
db.users.find({age:33})
多个条件查询
db.users.find({age:33}),({a:1,b:1})
查看负载
mongostat -h127.0.0.1:28018
-ufengguadmin -pfenggu123$%^ --authenticationDatabase=admin
备份所有
mongodump -h127.0.0.1:28018 -ufengguadmin '-pfenggu123$%^' -o /data/mongodb_backup/ --
authenticationDatabase=admin
恢复
mongorestore -h127.0.0.1:28018 -ufengguadmin -pfenggu123$%^ --db=s1 --
dir=/data/mongodb_backup/mongod_bak_now/2016_06_27/s1/ --authenticationDatabase=admin

MongoDB 创建数据库


MongoDB 创建数据库的语法格式如下:

    use DATABASE_NAME

如果数据库不存在,则创建数据库,否则切换到指定数据库。


可以看到,我们刚创建的数据库 mydb 并不在数据库的列表中, 要显示它,我们需要向 mongo 数据库插入一些数据。

 use mydb
switched to db mydb

 db.mydb.insert({"name":"linuxsa"})
    WriteResult({ "nInserted" : 1 })  


> show dbs
leanote	0.125GB
local	0.03125GB
mydb	0.0625GB


MongoDB 创建数据库

监控

利用Zabbix监控MongoDB

7启动脚本

https://github.com/mongodb/mongo/blob/master/rpm/mongod.service


[root@k8sn1 ~]# cat /etc/mongod.conf 
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data.
systemLog:
destination: file
logAppend: true
# path: /var/log/mongodb/mongod.log
path: /data/logs/mongod.log
# Where and how to store data.
storage:
dbPath: /data/apps/mongodb/data/
# dbPath: /var/lib/mongo 
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.

#security:
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options
#auditLog:
#snmp:

[root@k8sn1 ~]# cat /var/run/mongodb/mongod.pid
2376
[root@k8sn1 ~]# ll /var/run/mongodb/mongod.pid
-rw-r--r-- 1 mongod mongod 5 6月 16 15:24 /var/run/mongodb/mongod.pid

[root@k8sn1 ~]# cat /usr/lib/systemd/system/mongod.service 
[Unit]
Description=MongoDB Database Server
After=network.target
Documentation=https://docs.mongodb.org/manual
[Service]
User=mongod
Group=mongod
Environment="OPTIONS=-f /etc/mongod.conf"
EnvironmentFile=-/etc/sysconfig/mongod
ExecStart=/usr/bin/mongod $OPTIONS
ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb
ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb
ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb
PermissionsStartOnly=true
PIDFile=/var/run/mongodb/mongod.pid
Type=forking
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false

# Recommended limits for for mongod as specified in
# http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings
[Install]
WantedBy=multi-user.target


#sysv from 
. /lib/lsb/init-functions
CONFIGFILE="/etc/mongod.conf"
PROGRAM="/usr/bin/mongod"
MONGOPID="/var/run/mongodb/mongod.pid"
LOCK="/data/apps/mongodb/mongo/mongod.lock"

test -x $PROGRAM || exit 0
case "$1" in
start)
ulimit -f unlimited
ulimit -t unlimited
ulimit -v unlimited
ulimit -n 64000
ulimit -m unlimited
log_begin_msg "Starting MongoDB server"
$PROGRAM -f $CONFIGFILE
log_end_msg 0
;;
stop)
log_begin_msg "Stopping MongoDB server"
# if [ -f $LOCK ]; then
# rm $LOCK
# fi
if [ ! -z "$MONGOPID" ]; then
kill $MONGOPID
fi
log_end_msg 0
;;
status)
;;
*)
log_success_msg "Usage: /etc/init.d/mongodb {start|stop|status}"
exit 1
esac
 
#!/bin/sh
# chkconfig: - 64 36
# description:mongod
case $1 in
start)
/usr/local/mongodb/bin/mongod --maxConns 20000 --config /usr/local/mongodb/mongodb.conf
;;
stop)
/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.shutdownServer()"
;;
status)
/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.stats()"
;;
esac

关闭

  1. 没有启动脚本 或者启动脚本不成功时 请用kill -2 ,kill -9 不好 还可以关闭不了呢 Oct 23 2021
 ps -ef | grep mongod
root      3894  6353  1 20:04 ?        00:00:04 /usr/bin/mongod -f /etc/mongod.conf
root      9366 30672  0 20:09 pts/12   00:00:00 grep --color=auto mongod
[root@beta- etc]# kill -2  3894 6353
[root@beta- etc]# ps -ef | grep mongod
root      9828 30672  0 20:09 pts/12   00:00:00 grep --color=auto mongod

启动/关闭mongodb

关闭 试过 有人说数据会清空 

> use admin
switched to db admin
> db.shutdownServer()
Sat Oct 23 12:39:18.531 DBClientCursor::init call() failed
server should be down...
Sat Oct 23 12:39:18.543 trying reconnect to 127.0.0.1:27017
Sat Oct 23 12:39:18.544 reconnect 127.0.0.1:27017 failed couldn't connect to server 127.0.0.1:27017






mongod --fork --dbpath=/data/db --logpath=/data/db/mongod.log --rest --journal
--fork:以守护进程的方式运行MongoDB,关闭shell后不会停止,但要指定logpath
--dbpath:指定数据库目录,必须手动创建
--logpath:指定日志文件路径,注意是文件不是目录,不需要手动创建
--rest:启用MongoDb web 界面,web端口(默认28017)=db端口(默认27017)+1000
--journal:启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里
可能出现的错误:
ERROR: child process failed, exited with error number 1
原因1:上次mongodb未正常关闭
解决方法是删除mongod.lock,该文件将mongodb锁上防止用户操作
# find / -name mongod.lock
/usr/local/mongodb/mongod.lock
# rm -f /usr/local/mongodb/mongod.lock

原因2:启动时logpath指定的日志文件没有创建,且有同名文件夹,所有程序创建不了
原因3:加了--journal,去掉试试,这个不太确定



在mongodb的启动时,在数据目录下,会生成一个mongod.lock文件。如果在正常退出时,会清除这个mongod.lock文件,若要是异常退出,在下次启动的时候,会禁止启动,从而保留一份干净的一份副本数据。有人可能会想到删除这个文件,建议请不要这么做。如果这么做,我们也不知道数据文件是否会损坏,如果mongod.lock文件阻止mongod的启动,请对数据文件进行修复,而不是简单的删除该文件


配置文件

mongodb配置文件mongo.conf binIP详解

mongodb配置文件的binIP详解

    binIP关乎到访问连接的限制

******************************************************************************************************

   net:
  port: 27017
  #bindIp: 192.168.0.136   #如果修改成本机Ip,那除了本机外的机器都可以连接(就是自己连不了、哈哈、蛋疼)
  #bindIp: 0.0.0.0               #改成0,那么大家都可以访问(共赢)
  #bindIp: 127.0.0.1           #改成127,那就只能自己练了(独吞)

docker-compose安装mongodb

docker-compose 安装mongo

docker-compose安装mongodb说明

docker-compose安装mongodb

docker-compose构建mongodb容器实例

参考

https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/

Linux部署MongoDB

linux 安装mongodb

www.runoob.com Linux平台安装MongoDB

https://www.mongodb.org.cn/

MongoDb 快速入门教程

mongoDB基础入门一

https://www.mongodb.org.cn/tutorial/59.html

Linux 安装并使用 MongoDB



mongodb快速入门

win mongodb官网下载不了, MongoDB下载、安装、配置、使用,如何下载MongoDB数据库,MongoDB入门


NOSQL -- Mongodb的简单操作与使用(win10)

phpetc

Installing the MongoDB PHP Driver with PECL

MongoDB driver for PHP