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 以
可以配置此值:
-
在 MongoDB 配置文件中使用
-
通过命令行参数
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 collections7 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)
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 --dropbsog格式转换成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/koderovermongorestore --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 --dryRun9.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