服务器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

$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}}
  )

day07总结