“Mongodb基础”的版本间的差异

来自linux中国网wiki
跳到导航 跳到搜索
 
(未显示同一用户的72个中间版本)
第1行: 第1行:
 
=install=
 
=install=
 +
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-debian/
 +
== yum or apt==
 +
<pre>
 +
sudo apt-get install gnupg
 +
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
 +
 +
echo "deb https://mirrors.tuna.tsinghua.edu.cn/mongodb/apt/debian buster/mongodb-org/5.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
 +
 +
#Reload local package database.
 +
sudo apt-get update
 +
sudo apt-get install -y mongodb-org
 +
 +
systemctl restart  mongod
 +
  
== yum or apt==
+
</pre>
 
[https://mirrors.tuna.tsinghua.edu.cn/help/mongodb/ MongoDB国内apt yum镜像使用帮助]
 
[https://mirrors.tuna.tsinghua.edu.cn/help/mongodb/ MongoDB国内apt yum镜像使用帮助]
 +
 +
=== yum  mongodb 4.2===
 +
官方文档真的讲得非常 好
 +
 +
https://docs.mongodb.com/v4.2/tutorial/install-mongodb-on-red-hat/
 +
 +
<pre>
 +
mkdir -p /data/db_data/mongodb
 +
 +
chown -R mongod.mongod /data/db_data/mongodb/
 +
 +
 +
dbPath: /data/var/lib/mongo
 +
 +
mkdir -p  /data/var/lib/mongo
 +
chown -R  mongod.mongod /data/var/lib/mongo
 +
 +
systemctl start  mongod.service
 +
</pre>
 +
 +
==php mongo==
 +
yum install  php74-php-pecl-mongodb #remi
  
 
==[[Docker mongo]]==
 
==[[Docker mongo]]==
第67行: 第103行:
 
note_contents</pre>
 
note_contents</pre>
  
=[[MongoDB安全认证]]=
+
=[[MongoDB安全认证]] 请双击=
  
 
=常用命令=
 
=常用命令=
  
 
[https://www.runoob.com/mongodb/mongodb-connections.html MongoDB - 连接]
 
[https://www.runoob.com/mongodb/mongodb-connections.html MongoDB - 连接]
 +
 +
[https://www.jianshu.com/p/a37628711487#:~:text=MongoDB%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%20%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5%20%E5%BC%80%E5%90%AF%E8%BF%9C%E7%A8%8B%E8%AE%BF%E9%97%AE%EF%BC%9A%E4%BF%AE%E6%94%B9%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%20%2Fetc%2Fmongod.conf%20%E4%B8%AD%20bindIp%3A%20127.0.0.1%20%E4%B8%BA,-p%E5%AF%86%E7%A0%81%20%E6%95%B0%E6%8D%AE%E5%AF%BC%E5%85%A5%E5%AF%BC%E5%87%BA%20%E5%AF%BC%E5%85%A5%E6%95%B0%E6%8D%AE%E5%BA%93%E6%96%87%E4%BB%B6%E5%88%B0%E9%9B%86%E5%90%88%EF%BC%9Amongoimport%20-d%20%E6%95%B0%E6%8D%AE%E5%BA%93%E5%90%8D%20-c%20%E9%9B%86%E5%90%88%E5%90%8D%20%E6%95%B0%E6%8D%AE MongoDB常用命令]
 
<pre>
 
<pre>
 +
 +
 +
查找
 +
 +
db.collection.find()
 +
换成你的库
 +
 +
> db.mydb.find()
 +
{ "_id" : ObjectId("619792b73d53993339a009fe"), "name" : "linuxsa" }
 +
 +
> db.mydb.find().pretty()
 +
{ "_id" : ObjectId("619740cf0fe2e9867c3bb115"), "name" : "linuxsa" }
 +
>
 +
 +
  
 
evan@myxps:~/downloads/mongosh-1.0.7-linux-x64/bin$ ./mongosh  --host 192.168.10.120  --port 27018
 
evan@myxps:~/downloads/mongosh-1.0.7-linux-x64/bin$ ./mongosh  --host 192.168.10.120  --port 27018
第79行: 第132行:
  
  
 +
创建库
 +
 +
use chat_im
 +
#可以看到,我们刚创建的数据库 chat_im 并不在数据库的列表中, 要显示它,我们需要向 mongo 数据库插入一些数据。
 +
db.chat_im.insert({"name":"evantest"})
 +
 +
 +
 +
 +
> use runoob
 +
switched to db runoob
 +
> show collections
 +
runoob
 +
> db.runoob.find()
 +
{ "_id" : ObjectId("617668fa664b838e6ce51bfd"), "name" : "菜鸟教程" }
 +
>
  
  
第136行: 第205行:
 
删除集合
 
删除集合
 
db.mytable.drop()
 
db.mytable.drop()
 +
 +
count - 查询记录条数
 +
此操作符用于统计记录的条数。如下面的代码所示:
 +
 +
    db.users.find().count();
 +
 +
 
添加用户
 
添加用户
 
use dbname
 
use dbname
第159行: 第235行:
 
mongod  --shutdown  --dbpath /database/mongodb/data/
 
mongod  --shutdown  --dbpath /database/mongodb/data/
  
查询集合
+
查询集合 这里的集合users 相当于表
 
db.users.find()
 
db.users.find()
 +
> db.users.find()
 +
{ "CreatedTime" : ISODate("2014-05-06T11:04:10.658Z"), "Email" : "[email protected]", "LeftIsMin" : false, "Logo" : "", "NoteListWidth" : 266, "NotebookWidth" : 160, "Pwd" : "$2a$10$OWcC141iTHwY/H48zaIpoe09j0jyNLgaHTB/HUuC2GFQNX3LGZtoG", "Theme"
 +
 +
 
条件查询
 
条件查询
 
db.users.find({age:33})
 
db.users.find({age:33})
第178行: 第258行:
 
== MongoDB 创建数据库==
 
== MongoDB 创建数据库==
 
<pre>
 
<pre>
 
 
MongoDB 创建数据库的语法格式如下:
 
MongoDB 创建数据库的语法格式如下:
 
 
     use DATABASE_NAME
 
     use DATABASE_NAME
  
 
如果数据库不存在,则创建数据库,否则切换到指定数据库。
 
如果数据库不存在,则创建数据库,否则切换到指定数据库。
 
  
 
可以看到,我们刚创建的数据库 mydb 并不在数据库的列表中, 要显示它,我们需要向 mongo 数据库插入一些数据。
 
可以看到,我们刚创建的数据库 mydb 并不在数据库的列表中, 要显示它,我们需要向 mongo 数据库插入一些数据。
第191行: 第268行:
 
switched to db mydb
 
switched to db mydb
  
  db.mydb.insert({"name":"linuxsa"})
+
  > db.mydb.insert({"name":"linuxsa"})
 
     WriteResult({ "nInserted" : 1 })   
 
     WriteResult({ "nInserted" : 1 })   
 
  
 
> show dbs
 
> show dbs
第199行: 第275行:
 
local 0.03125GB
 
local 0.03125GB
 
mydb 0.0625GB
 
mydb 0.0625GB
 +
 +
</pre>
 +
 +
[https://www.mongodb.org.cn/tutorial/8.html MongoDB 创建数据库]
 +
== mongodb - 查看正在执行的操作==
 +
<pre>
 +
查看正在执行的操作
 +
db.currentOp()
 +
 +
查看系统执行的操作
 +
db.currentOp(True)
 +
 +
kill正在执行的操作
 +
db.killOp(<operation id>)
 +
</pre>
 +
 +
[https://blog.51cto.com/u_15127512/3584642  mongodb - 查看正在执行的操作 转载 ]
 +
 +
[https://blog.csdn.net/wangkai_123456/article/details/79161150  MongoDB性能优化系列:查看当前正在执行的操作]
 +
 +
[https://cloud.tencent.com/developer/article/1495805 MongoDB 进程控制系列一:查看当前正在执行的进程 ]
 +
 +
== 删除数据库==
 +
<pre>
 +
选中你要删除的,不然默认是test
 +
> use c_image_service
 +
switched to db c_image_service
 +
 +
查看你当前的库名
 +
> db
 +
c_image_service
 +
 +
#删除掉当前的库
 +
db.dropDatabase()
 +
</pre>
 +
 +
https://www.runoob.com/mongodb/mongodb-dropdatabase.html
 +
 +
==清空==
 +
<pre>
 +
> show dbs;
 +
admin                0.000GB
 +
config                0.000GB
 +
core_file_system      0.003GB
 +
crm_customer_service  0.029GB
 +
local                0.000GB
 +
> use crm_customer_service
 +
switched to db crm_customer_service
 +
 +
> db.crm_cs_im_message.remove({})
 +
WriteResult({ "nRemoved" : 107867 })
 +
 +
</pre>
 +
[https://www.mongodb.org.cn/manual/87.html count - 查询记录条数]
 +
 +
== MongoDB 删除数据库==
 +
use runoob
 +
db.dropDatabase()
 +
 +
=备份还原=
 +
MongoDB官方提供了两套数据导入导出工具,
 +
 +
一般来说,进行整库导出导入时使用mongodump和mongorestore,这一对组合操作的数据是BSON格式,进行大量dump和restore时效率较高。 进行单个集合导出导入时使用mongoexport和mongoimport,这一对组合操作的数据是JSON格式,可读性较高。
 +
 +
[https://cloud.tencent.com/document/product/240/5321 云数据库 MongoDB > 最佳实践 > 导出导入]
 +
 +
https://www.mongodb.com/docs/database-tools/mongodump/#mongodb-binary-bin.mongodump
 +
 +
https://www.mongodb.com/docs/v4.4/core/backups/
 +
 +
[https://www.cnblogs.com/Sungeek/p/11904825.html  Linux下shell脚本实现mongodb定时自动备份]
 +
 +
[https://segmentfault.com/a/1190000022459284 MongoDB数据库定时自动备份Shell脚本]
 +
 +
[https://www.vinchin.com/blog/vinchin-technique-share-details.html?id=1683 mongo自动备份脚本与恢复]
 +
==jan 132022==
 +
<pre>
 +
#here 2022
 +
mongodump --host=127.0.0.1 --port=27017 --username=root --password="R3456" --out=./mongodump-2022
 +
 +
mongodump --host=172.16.0.26  --username=mongouser  --password="aaaaa"  --out=./mongodump-20220310pm
 +
 +
#her
 +
  mongorestore --host=172.16.0.34 --port=27017 --username=mongouser --password="123" --authenticationDatabase=admin mongodump-2022#数据目录
 +
</pre>
 +
 +
==备份库 ==
 +
<pre>
 +
 +
备份指定库 april 2011
 +
 +
mongodump --host=ip --authenticationDatabase=admin  --username=mong  --password="36" --db=crm_  --out=./mongodump-crme-april
 +
 +
 +
 +
备份成功的测试  2022
 +
 +
sudo  mongodump --host=172.16.9.9 --authenticationDatabase=admin  --username=mongo  --password="123456" --db=im  --out=./mongodump-im.nov18
 +
 +
 +
mongodump --host=127.0.0.1 --port=27017 --username=root --password="DEVDddd^1" --out=./mongodump-2021
 +
 +
备份一个库  没密码的话
 +
mongodump -h 127.0.0.1 -d file_system -o  file_systemdate
 +
 +
</pre>
 +
 +
==还原库 ==
 +
<pre>
 +
还原有成功的测试  2022
 +
 +
mongorestore  ./image_service  #备份出来是有两个相同目录哦 如下 s  messages/messages/message.bson    如果 rsync 多了个目录 可能要 cd 进入一个层目录 April 13 2022
 +
 +
#这样要求密码  ,看下能不能 不要的
 +
mongorestore --host=127.0.0.1 --port=27017 --username=root --password="DEVDdevops^1ddd2ER3456666676" --authenticationDatabase=admin  mongodump-2021/
 +
 +
 +
 +
#成功here  restore  NOv22
 +
  mongorestore --host=127.0.0.1 --port=27017 --username=root --password="DEVDdevopsR3dddddd456" --authenticationDatabase=admin core_file_systemdate
 +
 +
 +
mongorestore --host 10.66.187.127:27017 -u mongouser -p thepasswordA1 --authenticationDatabase=admin --dir=/data/im
 +
 +
注意 记得 备份的是两种目录的
 +
eg  im/im/xxx.json
 +
 +
 +
 +
  
  
 +
</pre>
 +
=== 备份表===
 +
<pre>
 +
导出表叫 wechat
 +
mongoexport --host=im.mongodb.server  --collection=wechat  --authenticationDatabase=admin --username=mong --password=mypasswd  --db crm --out wechat.json
 +
 +
sudo mongoexport -u userName -p passwd -d mongotest -c users -o /home/python/Desktop/mongoDB/users.json --type json
 +
</pre>
 +
 +
=== 备份字段 导出字段===
 +
<pre>
 +
导出 mydb库中的wechat表中的 origin_id字段
 +
 +
--fields 是需要返回的字段  mongoexport  --help 可得到各种参数
 +
 +
mongoexport --host=172.16.1.27 --collection=wechat  --authenticationDatabase=admin --username=evan  --password=123345  --db mydb -f origin_id  --out  origin_id.json
 +
 +
</pre>
 +
==== 带条件导出数据====
 +
<pre>
 +
我的条件写错了  少了个 and  api 库  callrecord 表中的  _id,origin_call_record_id 字段  条件是and 里面那个
 +
mongoexport --host=192.16.1.27 --authenticationDatabase=admin  --username=evan --password=evanpasswd -d api  -c callrecord  --type=csv -f _id,origin_call_record_id -q '{"$and": [{"create_at": {"$gte": 1546272}}, {"ak_create_at": {"$lte": 1577808}}]}' \
 +
    --out ./report.csv
 +
 +
 +
有个问题 参数不能太多 原来是数据有问题  不是mongo的事
 +
 +
error parsing command line options: too many positional arguments:
 +
</pre>
 +
[https://blog.csdn.net/weixin_39989222/article/details/111554715  mongodb 导出 带条件_mongodb导出指定条件数据]
 +
https://blog.csdn.net/Henry_Wu001/article/details/122939697
 +
 +
===还原表===
 +
<pre>
 +
mongoimport
 +
 +
 +
-- host :要导入的数据库 ip
 +
--port :要导入的实例节点端口号
 +
--username :数据库用户名
 +
--password :数据库用户密码
 +
--collection :要导入的表名
 +
--db :要导入的表所在数据库名
 +
--file :要导入的源文件路径(默认为当前文件夹)
 +
 +
mongoimport  --collection ai_session_conversa --db ai_xbot --file ai_session_conversa.json
 +
 +
 +
</pre>
 +
[https://blog.csdn.net/q936889811/article/details/80733349  mongodb备份之导出和导入某个表]
 +
 +
[https://codeantenna.com/a/ll16qK9j4I mongodb进行整库备份与恢复,以及对单表的备份恢复,单表支持json格式和csv(excel)格式]
 +
 +
=MongoDb查询表内容=
 +
<pre>
 +
 +
db.表名.find({}) 表示查询所有记录
 +
 +
db.表名.find({uid:"12"}) 表示查询uid="12"的记录
 +
 +
db.表名.find({uid:"12"},{"uid":1,"uname":1,"_id":0}) 表示查询表中uid="12"的所有记录,返回字段为uid,uname两个字段"_id"不返回
 +
 +
db.表名.find({$or:[{"name":"sulin"},{"age":{"$gt":10}}]})
 +
 +
db.test.find({$where:function(){return this.age>10}})
 
</pre>
 
</pre>
  
[https://www.mongodb.org.cn/tutorial/8.html MongoDB 创建数据库]
 
  
 
=监控=
 
=监控=
 
   
 
   
 
[https://www.cnblogs.com/ahaii/p/7146290.html 利用Zabbix监控MongoDB]
 
[https://www.cnblogs.com/ahaii/p/7146290.html 利用Zabbix监控MongoDB]
 +
<pre>
 +
1.mongostat
 +
 +
  是mongdb自带的状态检测工具,
 +
 +
    inserts/s 每秒插入次数
 +
    query/s 每秒查询次数
 +
    update/s 每秒更新次数
 +
    delete/s 每秒删除次数
 +
    getmore/s 每秒执行getmore次数
 +
    command/s 每秒的命令数,比以上插入、查找、更新、删除的综合还多,还统计了别的命令
 +
    flushs/s 每秒执行fsync将数据写入硬盘的次数。
 +
    mapped/s 所有的被mmap的数据量,单位是MB,
 +
    vsize 虚拟内存使用量,单位MB
 +
    res 物理内存使用量,单位MB
 +
    faults/s  page faults
 +
    locked % 被锁的时间百分比
 +
    idx miss % 索引不命中所占百分比,提醒检查索引
 +
    q t|r|w 当Mongodb接收到太多的命令而数据库被锁住无法执行完成,它会将命令加入队列。这一栏显示了总共、读、写3个队列的长度,都为0的话表示mongo毫无压力。高并发时,一般队列值会升高。
 +
    conn 当前连接数
 +
    time 时间戳
 +
</pre>
 +
 +
mongostat
 +
insert query update delete getmore command dirty used flushes vsize  res qrw arw net_in net_out conn                time
 +
    *0    *0    *0    *0      0    2|0  0.0% 0.7%      0 1.13G 121M 0|0 1|0  158b  71.3k  18 Nov  4 14:21:06.091
 +
    *0    *0    *0    *0      0    1|0  0.0% 0.7%      0 1.13G 121M 0|0 1|0  157b  70.8k  18 Nov  4 14:21:07.093
 +
    *0    *0    *0    *0      0    2|0  0.0% 0.7%      0 1.13G 121M 0|0 1|0  158b  71.1k  18 Nov  4 14:21:08.090
 +
    *0    *0    *0    *0      0    1|0  0.0% 0.7%      0 1.13G 121M 0|0 1|0  157b  70.8k  18 Nov  4 14:21:09.093
 +
    *0    *0
  
 
=7启动脚本 =
 
=7启动脚本 =
第359行: 第659行:
  
 
启动/关闭mongodb
 
启动/关闭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
 
mongod --fork --dbpath=/data/db --logpath=/data/db/mongod.log --rest --journal
第383行: 第698行:
  
 
</pre>
 
</pre>
 +
 +
=配置文件=
 +
==mongodb配置文件mongo.conf binIP详解==
 +
<pre>
 +
mongodb配置文件的binIP详解
 +
 +
    binIP关乎到访问连接的限制
 +
 +
******************************************************************************************************
 +
 +
  net:
 +
  port: 27017
 +
  #bindIp: 192.168.0.136  #如果修改成本机Ip,那除了本机外的机器都可以连接(就是自己连不了、哈哈、蛋疼)
 +
  #bindIp: 0.0.0.0              #改成0,那么大家都可以访问(共赢)
 +
  #bindIp: 127.0.0.1          #改成127,那就只能自己练了(独吞)
 +
 +
</pre>
 +
 +
[https://www.cnblogs.com/xibuhaohao/p/11363847.html  MongoDB bindIp 与 bindIpAll ]
 +
 +
== 内存==
 +
<pre>
 +
如果机器上多个mongod混部,或者mongod跟其他的一些进程一起部署,则需要根据分给mongod的内存配额来配置 cacheSizeGB,按配额的60%左右配置即可。
 +
 +
4.改配置
 +
mongod  config
 +
 +
MongoDB的内存限制参数配置:
 +
3.X: /etc/mongod.conf
 +
4.X: /etc/mongod.conf.orig
 +
     
 +
     
 +
#居然格式如下    小胖 1G 一般最小要求也是1G
 +
# Where and how to store data.
 +
storage:
 +
  dbPath: /var/lib/mongo
 +
  journal:
 +
    enabled: true
 +
#  engine:
 +
#  wiredTiger:
 +
  wiredTiger:
 +
      engineConfig:
 +
        cacheSizeGB: 1
 +
     
 +
</pre>
 +
[https://www.cnblogs.com/dream-it-possible/p/13595851.html  MongoDB 的内存使用限制]
 +
 +
[https://blog.csdn.net/liubinli2005/article/details/76904884  Mongodb内存管理和使用情况情况查询]
 +
 +
[https://blog.csdn.net/chzphoenix/article/details/121281782  mongo占用内存过大解决方案]
 +
 +
[https://mongoing.com/archives/8781 MongoDB 如何使用内存?为什么内存满了?]
 +
 +
[https://blog.csdn.net/LuyaoYing001/article/details/75576820  MongoDB内存配置 --wiredTigerCacheSizeGB]
 +
 +
== MongoDB在一次查询中获取多少条记录==
 +
 +
每次显示20条只不过是mongo shell为了提高用户界面可读性而每次限止20条。在应用程序使用驱动进行交互的时候不会有这个问题。
 +
 +
你也可以修改这个20的数值。在shell下面输入:
 +
DBQuery.shellBatchSize = 50
 +
 +
就会显示50条一次
  
 
= docker-compose安装mongodb=
 
= docker-compose安装mongodb=
第394行: 第772行:
 
[https://blog.csdn.net/feinifi/article/details/105098829  docker-compose构建mongodb容器实例]
 
[https://blog.csdn.net/feinifi/article/details/105098829  docker-compose构建mongodb容器实例]
  
=参考=
+
=reference=
 +
 
 +
 
 +
[https://www.cnblogs.com/HuiLove/p/3953525.html MongoDb查询表内容]
 +
 
 
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
 
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
  
第404行: 第786行:
  
 
https://www.mongodb.org.cn/
 
https://www.mongodb.org.cn/
 +
 +
[https://www.jianshu.com/p/b8694894c26f mongodb基本操作]
  
 
[https://www.cnblogs.com/chanshuyi/p/quick_start_of_mongodb.html MongoDb 快速入门教程]
 
[https://www.cnblogs.com/chanshuyi/p/quick_start_of_mongodb.html MongoDb 快速入门教程]

2022年11月18日 (五) 08:39的最新版本

install

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

yum or apt

sudo apt-get install gnupg
 wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -

echo "deb https://mirrors.tuna.tsinghua.edu.cn/mongodb/apt/debian buster/mongodb-org/5.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list

#Reload local package database.
sudo apt-get update
sudo apt-get install -y mongodb-org

systemctl restart  mongod


MongoDB国内apt yum镜像使用帮助

yum mongodb 4.2

官方文档真的讲得非常 好

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

mkdir -p /data/db_data/mongodb

chown -R mongod.mongod /data/db_data/mongodb/


dbPath: /data/var/lib/mongo

mkdir -p  /data/var/lib/mongo
chown -R  mongod.mongod /data/var/lib/mongo

systemctl start  mongod.service 

php mongo

yum install  php74-php-pecl-mongodb #remi

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 - 连接

MongoDB常用命令



查找 

 db.collection.find()
 换成你的库
 
> db.mydb.find()
{ "_id" : ObjectId("619792b73d53993339a009fe"), "name" : "linuxsa" }

> db.mydb.find().pretty()
{ "_id" : ObjectId("619740cf0fe2e9867c3bb115"), "name" : "linuxsa" }
> 



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


创建库 

use chat_im
#可以看到,我们刚创建的数据库 chat_im 并不在数据库的列表中, 要显示它,我们需要向 mongo 数据库插入一些数据。
db.chat_im.insert({"name":"evantest"})




> use runoob
switched to db runoob
> show collections
runoob
> db.runoob.find()
{ "_id" : ObjectId("617668fa664b838e6ce51bfd"), "name" : "菜鸟教程" }
> 






> 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()

count - 查询记录条数
此操作符用于统计记录的条数。如下面的代码所示:

    db.users.find().count();


添加用户
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/

查询集合 这里的集合users 相当于表
db.users.find()
> db.users.find()
{ "CreatedTime" : ISODate("2014-05-06T11:04:10.658Z"), "Email" : "[email protected]", "LeftIsMin" : false, "Logo" : "", "NoteListWidth" : 266, "NotebookWidth" : 160, "Pwd" : "$2a$10$OWcC141iTHwY/H48zaIpoe09j0jyNLgaHTB/HUuC2GFQNX3LGZtoG", "Theme"


条件查询
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 创建数据库

mongodb - 查看正在执行的操作

查看正在执行的操作
db.currentOp()

查看系统执行的操作
db.currentOp(True)

kill正在执行的操作
db.killOp(<operation id>)

mongodb - 查看正在执行的操作 转载

MongoDB性能优化系列:查看当前正在执行的操作

MongoDB 进程控制系列一:查看当前正在执行的进程

删除数据库

选中你要删除的,不然默认是test
> use c_image_service
switched to db c_image_service

查看你当前的库名 
> db 
c_image_service

#删除掉当前的库
db.dropDatabase()

https://www.runoob.com/mongodb/mongodb-dropdatabase.html

清空

> show dbs;
admin                 0.000GB
config                0.000GB
core_file_system      0.003GB
crm_customer_service  0.029GB
local                 0.000GB
> use crm_customer_service
switched to db crm_customer_service

> db.crm_cs_im_message.remove({})
WriteResult({ "nRemoved" : 107867 })

count - 查询记录条数

MongoDB 删除数据库

use runoob
db.dropDatabase()

备份还原

MongoDB官方提供了两套数据导入导出工具,

一般来说,进行整库导出导入时使用mongodump和mongorestore,这一对组合操作的数据是BSON格式,进行大量dump和restore时效率较高。 进行单个集合导出导入时使用mongoexport和mongoimport,这一对组合操作的数据是JSON格式,可读性较高。

云数据库 MongoDB > 最佳实践 > 导出导入

https://www.mongodb.com/docs/database-tools/mongodump/#mongodb-binary-bin.mongodump

https://www.mongodb.com/docs/v4.4/core/backups/

Linux下shell脚本实现mongodb定时自动备份

MongoDB数据库定时自动备份Shell脚本

mongo自动备份脚本与恢复

jan 132022

#here 2022
mongodump --host=127.0.0.1 --port=27017 --username=root --password="R3456" --out=./mongodump-2022

mongodump --host=172.16.0.26   --username=mongouser  --password="aaaaa"  --out=./mongodump-20220310pm

#her 
  mongorestore --host=172.16.0.34 --port=27017 --username=mongouser --password="123" --authenticationDatabase=admin mongodump-2022#数据目录 

备份库


备份指定库 april 2011

mongodump --host=ip --authenticationDatabase=admin  --username=mong  --password="36" --db=crm_  --out=./mongodump-crme-april



备份成功的测试  2022

 sudo  mongodump --host=172.16.9.9 --authenticationDatabase=admin  --username=mongo   --password="123456" --db=im  --out=./mongodump-im.nov18


mongodump --host=127.0.0.1 --port=27017 --username=root --password="DEVDddd^1" --out=./mongodump-2021

备份一个库  没密码的话 
mongodump -h 127.0.0.1 -d file_system -o  file_systemdate

还原库

还原有成功的测试  2022 

mongorestore  ./image_service  #备份出来是有两个相同目录哦 如下 s  messages/messages/message.bson    如果 rsync 多了个目录 可能要 cd 进入一个层目录 April 13 2022

#这样要求密码  ,看下能不能 不要的 
 mongorestore --host=127.0.0.1 --port=27017 --username=root --password="DEVDdevops^1ddd2ER3456666676" --authenticationDatabase=admin  mongodump-2021/



 #成功here  restore  NOv22
  mongorestore --host=127.0.0.1 --port=27017 --username=root --password="DEVDdevopsR3dddddd456" --authenticationDatabase=admin core_file_systemdate


 mongorestore --host 10.66.187.127:27017 -u mongouser -p thepasswordA1 --authenticationDatabase=admin --dir=/data/im

注意 记得 备份的是两种目录的
 eg   im/im/xxx.json
 
 
 
 


备份表

导出表叫 wechat
mongoexport --host=im.mongodb.server  --collection=wechat  --authenticationDatabase=admin --username=mong --password=mypasswd  --db crm --out wechat.json

sudo mongoexport -u userName -p passwd -d mongotest -c users -o /home/python/Desktop/mongoDB/users.json --type json

备份字段 导出字段

导出 mydb库中的wechat表中的 origin_id字段

--fields 是需要返回的字段  mongoexport  --help 可得到各种参数 

 mongoexport --host=172.16.1.27 --collection=wechat  --authenticationDatabase=admin --username=evan  --password=123345  --db mydb -f origin_id  --out  origin_id.json

带条件导出数据

我的条件写错了  少了个 and   api 库  callrecord 表中的  _id,origin_call_record_id 字段  条件是and 里面那个 
 mongoexport --host=192.16.1.27 --authenticationDatabase=admin   --username=evan --password=evanpasswd -d api  -c callrecord  --type=csv -f _id,origin_call_record_id -q '{"$and": [{"create_at": {"$gte": 1546272}}, {"ak_create_at": {"$lte": 1577808}}]}' \
    --out ./report.csv


有个问题 参数不能太多 原来是数据有问题  不是mongo的事

error parsing command line options: too many positional arguments:

mongodb 导出 带条件_mongodb导出指定条件数据 https://blog.csdn.net/Henry_Wu001/article/details/122939697

还原表

mongoimport


-- host :要导入的数据库 ip
--port :要导入的实例节点端口号
--username :数据库用户名
--password :数据库用户密码
--collection :要导入的表名
--db :要导入的表所在数据库名
--file :要导入的源文件路径(默认为当前文件夹)

mongoimport  --collection ai_session_conversa --db ai_xbot --file ai_session_conversa.json


mongodb备份之导出和导入某个表

mongodb进行整库备份与恢复,以及对单表的备份恢复,单表支持json格式和csv(excel)格式

MongoDb查询表内容


db.表名.find({}) 表示查询所有记录

db.表名.find({uid:"12"}) 表示查询uid="12"的记录

db.表名.find({uid:"12"},{"uid":1,"uname":1,"_id":0}) 表示查询表中uid="12"的所有记录,返回字段为uid,uname两个字段"_id"不返回

db.表名.find({$or:[{"name":"sulin"},{"age":{"$gt":10}}]})

db.test.find({$where:function(){return this.age>10}})


监控

利用Zabbix监控MongoDB

1.mongostat

  是mongdb自带的状态检测工具,

    inserts/s 每秒插入次数
    query/s 每秒查询次数
    update/s 每秒更新次数
    delete/s 每秒删除次数
    getmore/s 每秒执行getmore次数
    command/s 每秒的命令数,比以上插入、查找、更新、删除的综合还多,还统计了别的命令
    flushs/s 每秒执行fsync将数据写入硬盘的次数。
    mapped/s 所有的被mmap的数据量,单位是MB,
    vsize 虚拟内存使用量,单位MB
    res 物理内存使用量,单位MB
    faults/s   page faults
    locked % 被锁的时间百分比
    idx miss % 索引不命中所占百分比,提醒检查索引
    q t|r|w 当Mongodb接收到太多的命令而数据库被锁住无法执行完成,它会将命令加入队列。这一栏显示了总共、读、写3个队列的长度,都为0的话表示mongo毫无压力。高并发时,一般队列值会升高。
    conn 当前连接数
    time 时间戳
mongostat
insert query update delete getmore command dirty used flushes vsize  res qrw arw net_in net_out conn                time
   *0    *0     *0     *0       0     2|0  0.0% 0.7%       0 1.13G 121M 0|0 1|0   158b   71.3k   18 Nov  4 14:21:06.091
   *0    *0     *0     *0       0     1|0  0.0% 0.7%       0 1.13G 121M 0|0 1|0   157b   70.8k   18 Nov  4 14:21:07.093
   *0    *0     *0     *0       0     2|0  0.0% 0.7%       0 1.13G 121M 0|0 1|0   158b   71.1k   18 Nov  4 14:21:08.090
   *0    *0     *0     *0       0     1|0  0.0% 0.7%       0 1.13G 121M 0|0 1|0   157b   70.8k   18 Nov  4 14:21:09.093
   *0    *0

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,那就只能自己练了(独吞)

MongoDB bindIp 与 bindIpAll

内存

如果机器上多个mongod混部,或者mongod跟其他的一些进程一起部署,则需要根据分给mongod的内存配额来配置 cacheSizeGB,按配额的60%左右配置即可。

4.改配置
mongod  config 

MongoDB的内存限制参数配置:
3.X: /etc/mongod.conf
4.X: /etc/mongod.conf.orig
      
      
 #居然格式如下     小胖 1G 一般最小要求也是1G 
# Where and how to store data.
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true
#  engine:
#  wiredTiger:
  wiredTiger:
      engineConfig:
        cacheSizeGB: 1
      

MongoDB 的内存使用限制

Mongodb内存管理和使用情况情况查询

mongo占用内存过大解决方案

MongoDB 如何使用内存?为什么内存满了?

MongoDB内存配置 --wiredTigerCacheSizeGB

MongoDB在一次查询中获取多少条记录

每次显示20条只不过是mongo shell为了提高用户界面可读性而每次限止20条。在应用程序使用驱动进行交互的时候不会有这个问题。

你也可以修改这个20的数值。在shell下面输入:

DBQuery.shellBatchSize = 50

就会显示50条一次

docker-compose安装mongodb

docker-compose 安装mongo

docker-compose安装mongodb说明

docker-compose安装mongodb

docker-compose构建mongodb容器实例

reference

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 快速入门教程

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