“Mongodb基础”的版本间的差异
(→关闭) |
(→备份库) |
||
(未显示同一用户的68个中间版本) | |||
第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 | |
+ | |||
+ | |||
+ | </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 | ||
第200行: | 第276行: | ||
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.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启动脚本 = | ||
第417行: | 第717行: | ||
[https://www.cnblogs.com/xibuhaohao/p/11363847.html MongoDB bindIp 与 bindIpAll ] | [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= | ||
第428行: | 第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/ | ||
第438行: | 第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
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安全认证 请双击
常用命令
查找 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 - 查看正在执行的操作
查看正在执行的操作 db.currentOp() 查看系统执行的操作 db.currentOp(True) kill正在执行的操作 db.killOp(<operation id>)
删除数据库
选中你要删除的,不然默认是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 })
MongoDB 删除数据库
use runoob db.dropDatabase()
备份还原
MongoDB官方提供了两套数据导入导出工具,
一般来说,进行整库导出导入时使用mongodump和mongorestore,这一对组合操作的数据是BSON格式,进行大量dump和restore时效率较高。 进行单个集合导出导入时使用mongoexport和mongoimport,这一对组合操作的数据是JSON格式,可读性较高。
https://www.mongodb.com/docs/database-tools/mongodump/#mongodb-binary-bin.mongodump
https://www.mongodb.com/docs/v4.4/core/backups/
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进行整库备份与恢复,以及对单表的备份恢复,单表支持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}})
监控
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
关闭
- 没有启动脚本 或者启动脚本不成功时 请用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,那就只能自己练了(独吞)
内存
如果机器上多个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内存配置 --wiredTigerCacheSizeGB
MongoDB在一次查询中获取多少条记录
每次显示20条只不过是mongo shell为了提高用户界面可读性而每次限止20条。在应用程序使用驱动进行交互的时候不会有这个问题。
你也可以修改这个20的数值。在shell下面输入:
DBQuery.shellBatchSize = 50
就会显示50条一次
docker-compose安装mongodb
reference
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
www.runoob.com Linux平台安装MongoDB
https://www.mongodb.org.cn/tutorial/59.html
win mongodb官网下载不了, MongoDB下载、安装、配置、使用,如何下载MongoDB数据库,MongoDB入门
NOSQL -- Mongodb的简单操作与使用(win10)