返回顶部

MongoDB 的使用

安装

1.配置yum源

#vim /etc/yum.repos.d/mongodb-org-5.0.repo
[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc

#yum repolist

2.安装mongodb

#安装稳定版本
yum install -y mongodb-org

#安装指定版本
yum install -y mongodb-org-5.0.2 mongodb-org-database-5.0.2 mongodb-org-server-5.0.2 mongodb-org-shell-5.0.2 mongodb-org-mongos-5.0.2 mongodb-org-tools-5.0.2

#防止升级出现意外,固定包配置/etc/yum.conf
exclude=mongodb-org,mongodb-org-database,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-tools

`启动服务`
/data/mongodb_bin/bin/mongod --config /etc/mongodb.conf
/usr/bin/mongod -f /etc/mongod.conf
/usr/bin/mongod --config /etc/mongod.conf

systemctl daemon-reload
systemctl start mongod

卸载mongo
sudo service mongod stop
sudo yum erase $(rpm -qa | grep mongodb-org)
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongo

#确定使用哪个init系统
ps --no-headers -o comm 1
   `systemd- 选择下面的systemd (systemctl)选项卡。
  systemctl daemon-reload
systemctl start mongod
systemctl status mongod
systemctl enable mongod
systemctl stop mongod
systemctl restart mongod

   `init- 选择下面的System V Init(服务)选项卡
chkconfig mongod on
service mongod start
service mongod stop
service mongod restart

#cat /usr/lib/systemd/system/mongod.service
[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network-online.target
Wants=network-online.target

[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 mongod as specified in
# https://docs.mongodb.com/manual/reference/ulimit/#recommended-ulimit-settings

[Install]
WantedBy=multi-user.target

3 本地主机绑定

默认情况下,MongoDB 以bindIpset to 启动127.0.0.1,它绑定到 localhost 网络接口。这意味着mongod只能接受来自在同一台机器上运行的客户端的连接。远程客户端将无法连接到mongod,并且除非将此值设置为有效的网络接口,否则mongod将无法初始化副本集

可以配置此值:

  • 在 MongoDB 配置文件中使用bindIp, 或

  • 通过命令行参数 --bind_ip

4 创建数据库

MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中 。

#创建数据库
> use mongo  
#show dbs 查看所有数据库 ,发现mongo数据库不在数据库列表里
> show dbs

#显示创建数据库,需要向mongo数据库中插入一些数据
> db.mongo.insert({"name":"mongodb"})

5.删除数据库

#删除数据库runoob
> db.dropDatabase()  
{ "dropped" : "runoob", "ok" : 1 }

删除集合

db.collection.drop()

6. 文档

插入文档可以使用db.col.save(document)命令。如果不指定 _id字段save()方法类似insert()方法。如果指定 _id字段,则会更新该 _id的数据。

# MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下
db.COLLECTION_NAME.insert(document)

#插入文档,文档存储在mongodb的mongo数据库的col集合,col是集合名,如果该集合名不在该数据库中,MongoDB会自动创建该集合并插入文档
> db
mongo
> db.col.insert ( { title: "Mongodb",
description: "mongodb是Nosql数据库",
by: "mongoDB",
url: "http://www.mongodb.org.cn",
tags: ["mongodb","database","Nosql"],
likes: 100
})

#查看插入的文档
> db.col.find ()

#可以将数据定义为一个变量,如下
> document=( { title: "Mongodb",
description: "mongodb是Nosql数据库",
by: "mongoDB",
url: "http://www.mongodb.org.cn",
tags: ["mongodb","database","Nosql"],
likes: 100
})

#执行插入操作
> db.col.insert(document)

#查看插入的文档
> db.col.find ()
#查看更新修改的标题
> db.col.find().pretty()

#创建集合
> db.createCollection("name")
#查看集合
> show tables
> show collections

MongoDB复制

mongoDB复制是将数据同步在多个服务器的过程。复制提供了数据的冗余备份,并在多个服务器上存储数据库副本,提高了数据的高可用性,并可以保证数据的安全性。复制允许从硬件故障和服务中断中恢复数据。

复制优点

  • 保障数据的安全性

  • 数据高可用性

  • 灾难恢复

  • 无需停机维护(如,备份,重建索引,压缩)

  • 分布式读取数据

复制原理

MongoDB的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。各节点常见的搭配方式为: 一主一从、一主多从。

主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,保证从节点的数据和主节点一致。

客户端总主节点,在客户端写入数据到主节点,主节点与从节点进行数据交互保障数据的一致性

副本集特征

  • N个节点的集群

  • 任何节点可作为主节点

  • 所有写入操作都在主节点上

  • 自动故障转移

  • 自动恢复

8 创建角色和用户

role: 权限 db: 拥有对这个库的操作权限

#mongodb与其他数据库不一样,mongo中在哪个库中创建的用户就只有对那个库有操作权限,除非在role中特别说

rs0:PRIMARY> use admin
switched to db admin
rs0:PRIMARY> db.createUser({user:"admin",pwd:"123456",roles:[{role:"root",db:"admin"}]})
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}


#mongo mongodb://admin:123456@10.0.0.107:27018

#用户角色: 1:可以使用的数据库管理员角色如下: dbAdmin----授予执行管理任务的特权 userAdmin---允许您在当前数据库上创建和修改用户和角色 dbOwner----此角色结合了以下内容: readWrite dbAdmin userAdmin

2.集群管理员角色 用于管理整个系统的管理数据库中的角色。 clusterMonitor---提供对监视工具的只读访问。 clusterManager---用于管理和监视集群上的操作 hostManager---监视和管理服务器 clusterAdmin----结合了其他三个角色和dropDatabase操作

3.备份和恢复角色 这个角色数据管理数据库。 backup---提供备份数据所需的权限 restore---提供从备份中还原数据所需的特权

4.所有数据库角色 这些角色位于管理数据库上,并提供适用于所有数据库的特权。 readAnyDatabase——与“read”角色相同,但适用于所有数据库 readWriteAnyDatabase——与“readWrite”角色相同,但适用于所有数据库 userAdminAnyDatabase——与‘userAdmin’角色相同,但适用于所有数据库 dbAdminAnyDatabase——与“dbAdmin”角色相同,但适用于所有数据库

5.超级用户角色 以下角色不是直接的超级用户角色,但是能够为任何用户分配任何数据库上的任何特权,也包括他们自己。 userAdmin dbOwner userAdminAnyDatabase root角色提供对所有资源的完全特权: root

9 备份还原

MongoDB 备份(mongodump)

在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。

mongodump命令可以通过参数指定导出的数据量级转存的服务器。

mongodump命令脚本语法如下:

#mongodump -h dbhost -d dbname -o dbdirectory
 
#mongodump -h 10.54.1.13:27018 --gzip -v -j 3 -d koderover -o /data/backup/mongod_bak/0617_bak
 
#mongorestore -h 10.54.1.13 --port 27018 -d zadig_admin --drop /data/backup/mongod_bak/koderover/
#mongorestore -h 10.54.1.13 --port 27018 -d zadig_admin --dir /data/backup/mongod_bak/koderover/

全备单节点
#mongodump --port 27017 -u myUserAdmin -p 123456 --authenticationDatabase admin -o back
-o #指定备份后目录名称

全备集群
#mongodump --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -o mongo_backup
#mongodump -h 10.0.0.107:27018 --gzip -o /data/


只备份某个数据库
#mongodump --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -d oldboy -o mongo_backup
-d #指定备份库的名称

只备份某个库下的某个集合
#mongodump --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -d oldboy -c user_info -o mongo_backup
-c #指定集合的名称


-h:
  • MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017

  • -d:

    需要备份的数据库实例,例如:test

  • -o:

    备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。

语法描述实例
mongodump --host HOST_NAME --port PORT_NUMBER 该命令将备份所有MongoDB数据 mongodump --host w3cschool.cc --port 27017
mongodump --dbpath DB_PATH --out BACKUP_DIRECTORY   mongodump --dbpath /data/db/ --out /data/backup/
mongodump --collection COLLECTION --db DB_NAME 该命令将备份指定数据库的集合。 mongodump --collection mycol --db test

9.2 MongoDB恢复(mongorerstore)

mongodb使用 mongorerstore 命令来恢复备份的数据。

语法

mongorestore命令脚本语法如下:

  >mongorestore -h dbhost -d dbname --directoryperdb dbdirectory  
  • -h:

    MongoDB所在服务器地址

  • -d:

    需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2

  • --directoryperdb:

    备份数据所在位置,例如:c:\data\dump\test,这里为什么要多加一个test,而不是备份时候的dump,读者自己查看提示吧!

  • --drop:

    恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除

恢复bson格式的数据
mongorestore --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" mongo_backup

恢复gzip格式的数据
mongorestore --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" mongo_backup --gzip

遇到重复的删除再导⼊
mongorestore --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" mongo_backup --gzip --drop
--drop #遇到重复值删除再导入

模拟执行导入
mongorestore --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" mongo_backup --gzip --drop --dryRun
--dryRun #模拟执行

恢复到指定集合(恢复到指定集合那么数据格式必须是bson格式)
mongorestore --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" --dir=./mongo_backup/oldboy/cook.bson -d oldboy -c cook --drop

bsog格式转换成json格式
bsondump cook.bson --outFile=cook.json
将cook.bson到处成为cook.json

 

腾讯云原生mongodb备份和恢复

mongodump --host 10.54.1.18:27018 -u zadig -p zadig --authenticationDatabase=admin --gzip -d zadig_admin -o /dir/zadig_admin
mongodump --host 10.54.1.18:27018 -u zadig -p zadig --authenticationDatabase=admin --gzip -d koderover -o /dir/koderover

mongorestore --host 10.54.2.122:27017 --drop --gzip --dir=/dir/zadig_admin --dryRun
mongorestore --host 10.54.2.122:27017 -u zadig -p zadig --authenticationDatabase=admin -d zadig_admin --drop --gzip --dir=/dir/zadig_admin --dryRun
mongorestore --host 10.54.2.18:27017 -uzadig -p zadig  --authenticationDatabase=admin -d koderover --drop --gzip --dir=/dir/koderover --dryRun

9.3 mongoexport/mongoimport备份和恢复

`备份
--authenticationDatabase admin
导出指定集合为json格式
mongoexport --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -d test -c user_info -o mongo_backup/test.user_info.json

导出成csv格式
--fields=_id,title,description,by,url,tags,likes  
-f _id,title,description,by,url,tags,likes
#mongoexport --host="10.0.0.107:27018,10.0.0.117:27018,10.0.0.127:27018" -d mongo -c col --type=csv --fields=_id,title,description,by,url,tags,likes -o /data/mongo.col.csv

mongoexport --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -d test -c user_info --type=csv --fields=name,age,host -o mongo_backup/test.user_info.csv
--fields #指定字段

`恢复
#mongoimport --host="10.0.0.107:27018,10.0.0.117:27018,10.0.0.127:27018" -d mongo -c col /data/mongo.col.json --drop
#mongoimport --host="10.0.0.107:27018,10.0.0.117:27018,10.0.0.127:27018" --type=csv --headerline -d mongo -c col /data/mongo.col.csv --drop

从json格式恢复数据
mongoimport --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -d test -c user_info mongo_backup/test.user_info.json --drop

从csv格式恢复数据
mongoimport --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" --type=csv --headerline -d test -c user_info mongo_backup/test.user_info.csv --drop
--headerline #以第一行数据作为列的依据,作为列名识别,不导入数据
-j n  #并发导入,n是CPU核数

9.4 将mysql数据导入mongo

1、mysql开启安全路径
vim /etc/my.cnf
#添加以下配置
secure-file-priv=/tmp

重启数据库生效
/etc/init.d/mysqld restart

2、mysql⾃定义分隔符导出成csv格式
select * from test.t100w limit 10 into outfile '/tmp/100w.csv'   fields terminated by ',';

PS:mysql导出csv
fields terminated by ','    ------字段间以,号分隔
optionally enclosed by '"'   ------字段用"号括起
escaped by '"'    ------字段中使用的转义符为"
lines terminated by '\r\n';  ------行以\r\n结束

PS:mysql导入csv
load data infile '/tmp/2.csv'  
into table t1  
fields terminated by ',' ;

3、在mongodb中导入备份
ongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d test  -c t100w --type=csv -f id,num,k1,k2,dt --file /tmp/100w.csv

 

 

10  批量提取mongodb的单库下所有文档的大小【脚本】

#cat mongdb.py

import os,sys
list = []
for i in range(3,50):
l = os.popen("/bin/echo 'show collections'| mongo mongodb://10.54.1.13:27018/koderover|sed -n '%sp'" %i)
l = l.read()
if l != "":
list.append(l)
else:
print "the collections is %s" %i
del list[i-4]
break
for i in list:
i = i.strip("\n")
os.popen("/bin/echo 'db.%s.stats()'| mongo mongodb://10.54.1.13:27018/koderover|sed -n '2p; 4p;6p;8p'>>mongodb_size_count.txt" %i

 

 

 

 

posted @ 2021-09-25 20:44  九尾cat  阅读(480)  评论(0编辑  收藏  举报