服务器mongo数据恢复
服务器mongo数据备份
更新服务器端Cookies信息
# 1 在mac上获得所有cookie
cd /Users/silince/PycharmProjects/舆情项目/WeiboSpider-master/WeiboSpider-master_12.17/sina/cookiespoolbyhand
# 2 备份Sina下的account集合
mongodump -h 127.0.0.1:27017 -c account -d Sina -o /Users/silince/Documents/data/mongo备份/Sina_account
# 3 上传至服务器/root/data/mongo备份/account
scp -r ~/Documents/data/mongo备份/Sina_account root@47.97.191.157:/root/data/mongo备份/
密码:Q******6
# 4 恢复account数据
mongo
use admin
db.auth("silince","z**y")
use Sina
db.account.remove({}) # 删除account中原来的旧cookies
mongorestore -h 127.0.0.1:27017 -c account -d Sina /root/data/mongo备份/Sina_account/Sina/account.bson
备份数据
# 程序放在服务器上跑,跑完后需要备份数据库
# 备份服务器的mongo
mongodump -u 'silince' -p 'z***y' --authenticationDatabase 'admin' -h 127.0.0.1:27017 -d Sina -o ~/data/mongo备份/Sina_{time}
# 备份本地的mongo
mongodump -h 127.0.0.1:27017 -d Sina -o ~/Documents/data/mongo备份/Sina_{time}
恢复数据
# 使用FileZilla下载备份的数据库,恢复到mac上
mv ~/Sina ~/Documents/data/mongo备份
mongo
use Sina
db.dropDatabase()
exit
# 本地恢复方式
mongorestore -h 127.0.0.1:27017 -d Sina ~/Documents/data/mongodb备份/Sina_{time}/Sina
# 阿里云恢复方式
mongorestore -u 'silince' -p 'z***y' --authenticationDatabase 'admin' -h 127.0.0.1:27017 -d Sina /root/data/mongo备份/Sina_{time}/Sina
⭐️一些路径
mongodb 路径:cd /usr/mongodb
配置文件:vim /usr/mongodb/mongodb.conf
# 关闭mongo:
mongod --shutdown --dbpath=/usr/mongodb/db/
centos 安装mondodb
温馨提示:我的环境是腾讯云自带的CentOS7.4 x64 镜像,本地环境是win10 x64 专业版,ssh工具是用的win10 自带的cmd, 远程工具版本是Robo 3T 1.2.1 。 如果环境不一致,可能会出现无法预知的错误。
1、去官网找到安装包地址,复制下来。 官网地址:https://www.mongodb.com/download-center?jmp=nav#community 我使用的安装包地址:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz
2、使用SSH登录服务器,找一个文件夹存放安装包,我这里使用的是 /usr
$ cd /usr
$ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz
第一步是定位到/usr文件夹,第二步是下载安装包。
如图所示进度到100%时,就是下载完成了。
3、解压缩安装包,并重命名文件夹。
第一步是解压缩,第二步是重命名,
$ tar zxvf mongodb-linux-x86_64-4.0.0.tgz
$ mv mongodb-linux-x86_64-4.0.0 mongodb
4、配置环境变量
$ vim /etc/profile
在 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 一行的上面添加如下内容:
#Set Mongodb
export PATH=/usr/mongodb/bin:$PATH
保存后通过下面的命令使环境变量生效:
$ cd ~
$ source /etc/profile
设置环境变量
5、创建数据库目录
$ cd /usr/mongodb
$ touch mongodb.conf
$ mkdir db
$ mkdir log
$ cd log
$ touch mongodb.log
6、修改mongodb配置文件。
vim /usr/mongodb/mongodb.conf
添加以下内容
port=27017 #端口
dbpath= /usr/mongodb/db #数据库存文件存放目录
logpath= /usr/mongodb/log/mongodb.log #日志文件存放路径
logappend=true #使用追加的方式写日志
fork=true #以守护进程的方式运行,创建服务器进程
maxConns=100 #最大同时连接数
noauth=true #不启用验证
journal=true #每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。
#即使宕机,启动时wiredtiger会先将数据恢复到最近一次的checkpoint点,然后重放后续的journal日志来恢复。
storageEngine=wiredTiger #存储引擎有mmapv1、wiretiger、mongorocks
bind_ip = 0.0.0.0 #这样就可外部访问了,例如从win10中去连虚拟机中的MongoDB
7、设置文件夹权限
$ cd /usr/mongodb
$ chmod 777 db
$ chmod 777 log
8、启动mongodb
$ cd ~
$ mongod --config /usr/mongodb/mongodb.conf
网友指正:最新版本mongodb已经将--config 修改为 -f (本人尚未尝试)
mongodb指令
启动/关闭
# 启动
mongod --dbpath=/usr/mongodb/db/ --bind_ip=0.0.0.0 --auth #启动mongodb(阿里云)
use admin
db.auth("silince","z***y")
use Sina
# 关闭
use admin
db.auth("silince","z***y")
db.shutdownServer()
###备份
mongodump -h 127.0.0.1:27017 -d Sina -o /Users/silince/Documents/mongodb备份
mongodump -h 127.0.0.1:27017 -c account -d Sina -o /Users/silince/Documents/mongodb备份
恢复(恢复时会先删除原有的数据)
mongorestore -h 127.0.0.1:27017 -d Sina /Users/silince/Documents/mongodb备份/Sina
mongodb插入数据
- db.collecion.insert({}) 插入数据,
_id
存在就报错 - db.collection.save({}) 插入数据,
_id
存在会更新
mongodb的更新操作
db.test1000.update({name:"xiaowang"},{name:"xiaozhao"})
- 把name为xiaowang的数据替换为
{name:"xiaozhao"}
db.test1000.update({name:"xiaohong"},{$set:{name:"xiaozhang"}})
- 把name为xiaowang的数据name的值更新为xiaozhang
db.test1000.update({name:"xiaozhang"},{$set:{name:"xiaohong"}},{multi:true})
{multi:true}
达到更新多条的目的
mongodb删除
db.test1000.remove({name:"xiaohong"},{justOne:true})
- 默认情况会删除所有满足条件的数据,
{justOne:true}
能达到只删除一条的效果
mongodb的count方法
db.collection.find({条件}).count()
db.collection.count({})
mongodb的投影
- 投影:选择返回结果的字段
db.collection.find({条件},{name:1,_id:0})
- 1.
_id
默认会显示,置为0不显示 - 2.出了
_id
之外的其他字段,如果不显示,不写,不能写为0
- 1.
$group的注意点
$group
对应的字典中有几个键,结果中就有几个键- 分组依据需要放到
_id
后面 - 取不同的字段的值需要使用$,
$gender
,$age
- 取字典嵌套的字典中的值的时候
$_id.country
- 能够同时按照多个键进行分组
{$group:{_id:{country:"$country",province:"$province"}}}
- 结果是:
{_id:{country:"",province:""}
- 结果是:
编辑器写mongodb语句
db.stu.find(
{$or:[{age:{$gte:20}},{hometown:{$in:["桃花岛","华⼭"]}}]}
)
#按照gender进行分组,获取不同组数据的个数和平均年龄
db.stu.aggregate(
{$group:{_id:"$gender",count:{$sum:1},avg_age:{$avg:"$age"}}},
{$project:{gender:"$_id",count:1,avg_age:"$avg_age",_id:0}}
)
# 按照hometown进行分组,获取不同组的平均年龄
db.stu.aggregate(
{$group:{_id:"$hometown",mean_age:{$avg:"$age"}}}
)
#使用$group统计整个文档
db.stu.aggregate(
{$group:{_id:null,count:{$sum:1},mean_age:{$avg:"$age"}}}
)
#选择年龄大于20的学生,观察男性和女性有多少人
db.stu.aggregate(
{$match:{$or:[{age:{$gt:20}},{hometown:{$in:["蒙古","⼤理"]}}]}},
{$group:{_id:"$gender",count:{$sum:1}}},
{$project:{_id:0,gender:"$_id",count:1}}
)
#page37页练习
db.tv3.aggregate(
{$group:{_id:{country:"$country",province:"$province",userid:"$userid"}}},
{$group:{_id:{country:"$_id.country",province:"$_id.province"},count:{$sum:1}}},
{$project:{country:"$_id.country",province:"$_id.province",count:1,_id:0}}
)
既已览卷至此,何不品评一二: