mongodb的备份,数据迁移--05


两种备份的区别

mongoexport/mongoimportmongodump/mongorestore
导入/导出的是JSON格式或者CSV格式导入/导出的是BSON格式
不同版本的mongodb使用相同版本的mongodb
异构平台迁移 mysql-mongodb日常备份恢复时使用

1)JSON可读性强但体积较大,BSON则是二进制文件,体积小但对人类几乎没有可读性
2)不同版本之间用mongodump/mongorestore可能不会成功,具体要看版本之间的兼容性。当无法使用BSON进行跨版本的数据迁移的时候,使用JSON格式即mongoexport/mongoimport是一个可选项
3)JSON虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引,账户等其他基础信息。
使用时应该注意

1. mongoexport(导出)/mongoimport(导入) 备份

1.1 mongoexport参数

-h指明数据库的宿主机的ip
-u数据库的用户名称
-p用户密码
--port端口号
-d数据库的名字
-c指明collection的名字
-f使命导出那些列
--type=csv默认的格式就是json的格式,要使用csv必须指明导出的列名-f
-o指明导出的文件名
-q过滤条件
--authenticationDatabase admin用户验证库

单表的备份json的格式(默认的额导出格式就是json)

 mongoexport -uroot -proot123 --port 27017 --authenticationDatabase admin -d yq -c t1 -o /mongodb/backup/yq.json
[mongod@m01 backup]$ cat yq.json 
{"_id":{"$oid":"61a18afb30cefaf83ec108f1"},"id":1.0}
{"_id":{"$oid":"61a18afd30cefaf83ec108f2"},"id":2.0}

导出为csv的格式 – type

mongoexport -uroot -proot123 --port 27017 --authenticationDatabase admin -d yq -c t1 --type=csv -f id,name -o /mongodb/backup/yq.csv
[mongod@m01 backup]$ cat yq.csv 
id,name
1,
2,
3,
3,yq
4,yq
5,yq

注意:cvs格式的第一行列的名称

1.2 mongoimport导入到参数

-h数据库的宿主机的ip
-u用户名
-p密码
--authenticationDatabase admin用户验证库
-d数据库名称
--drop有这个数据库存在就删除
-c表名
-f列名
-j并行数,根据cpu以及硬件的配置来设置,提高导入的数据
--file文件的位置

数据的恢复
恢复json的数据格式到yq的t2表

mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d yq -c t2 /mongodb/backup/yq.json 
> show tables
t1
t2
> db.t2.find()
{ "_id" : ObjectId("61a18afb30cefaf83ec108f1"), "id" : 1 }
{ "_id" : ObjectId("61a18afd30cefaf83ec108f2"), "id" : 2 }
{ "_id" : ObjectId("61a18d3b5b1576cf6b6a6cc4"), "id" : 3 }
{ "_id" : ObjectId("61a18da45b1576cf6b6a6cc5"), "id" : 3, "name" : "yq" }
{ "_id" : ObjectId("61a18dac5b1576cf6b6a6cc6"), "id" : 4, "name" : "yq" }
{ "_id" : ObjectId("61a18daf5b1576cf6b6a6cc7"), "id" : 5, "name" : "yq" }
> 

恢复csv的到yq的t3
注意第一行的不是数据而是列的名称
1.csv格式第一行有列的名字的
--headerline

mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d yq -c t3 --type=csv --headerline --file /mongodb/backup/yq.csv 

2.csv第一行没有列的名称,指定列的名称-f

mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d yq -c t4 --type=csv -f id,name  --file /mongodb/backup/yq.csv

1.3 MySQL的数据迁移到mongodb

mysql 开启安全路径

vim /etc/my.cnf   --->添加以下配置
secure-file-priv=/tmp

数据的导出

select * from t100w into outfile '/tmp/t100.csv' fields terminated by ',';

查看

[root@m01 tmp]# head t100.csv 
1,56914,Hd,MN89,2019-07-09 16:01:41
2,542219,tx,bc45,2019-07-09 16:01:41
3,944336,6i,XYPQ,2019-07-09 16:01:41
4,137325,PK,34VW,2019-07-09 16:01:41
5,81318,wz,67KL,2019-07-09 16:01:41
6,574174,LZ,wxuv,2019-07-09 16:01:41
7,146558,ZG,fg23,2019-07-09 16:01:41
8,649971,e4,ABxy,2019-07-09 16:01:41
9,94891,ey,YZ34,2019-07-09 16:01:41
10,22211,Sv,HITU,2019-07-09 16:01:41

处理备份文件
查看表的数据结构

atlas [world]>desc t100w;
+-------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type      | Null | Key | Default           | Extra                       |
+-------+-----------+------+-----+-------------------+-----------------------------+
| id    | int(11)   | YES  |     | NULL              |                             |
| num   | int(11)   | YES  |     | NULL              |                             |
| k1    | char(2)   | YES  |     | NULL              |                             |
| k2    | char(4)   | YES  |     | NULL              |                             |
| dt    | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+-------------------+-----------------------------+

处理csv文件
第一种添加

vim /tmp/t100.csv 添加再第一行
id,nmu,k1,k2,dt
id,num,k1,k2,dt
1,56914,Hd,MN89,2019-07-09 16:01:41
2,542219,tx,bc45,2019-07-09 16:01:41

导入
–headerline

mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d world  -c city --type=csv --headerline --file  /tmp/t100.csv
> use world
switched to db world
> db.city.find()
{ "_id" : ObjectId("61a197133eec115ac1e533da"), "id" : 1, "num" : 56914, "k1" : "Hd", "k2" : "MN89", "dt" : "2019-07-09 16:01:41" }
{ "_id" : ObjectId("61a197133eec115ac1e533db"), "id" : 2, "num" : 542219, "k1" : "tx", "k2" : "bc45", "dt" : "2019-07-09 16:01:41" }
{ "_id" : ObjectId("61a197133eec115ac1e533dc"), "id" : 3, "num" : 944336, "k1" : "6i", "k2" : "XYPQ", "dt" : "2019-07-09 16:01:41" }
{ "_id" : ObjectId("61a197133eec115ac1e533dd"), "id" : 4, "num" : 137325, "k1" : "PK", "k2" : "34VW", "dt" : "2019-07-09 16:01:41" }

第二种不添加任何的操作
-f 指定列的名称

mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d world  -c city --type=csv -f id,num,k1,k2,dt  --file  /tmp/t100.csv
> db.city.find()
{ "_id" : ObjectId("61a196693eec115ac1d576f4"), "id" : 1, "num" : 56914, "k1" : "Hd", "k2" : "MN89", "dt" : "2019-07-09 16:01:41" }
{ "_id" : ObjectId("61a196693eec115ac1d576f5"), "id" : 2, "num" : 542219, "k1" : "tx", "k2" : "bc45", "dt" : "2019-07-09 16:01:41" }
{ "_id" : ObjectId("61a196693eec115ac1d576f6"), "id" : 3, "num" : 944336, "k1" : "6i", "k2" : "XYPQ", "dt" : "2019-07-09 16:01:41" }
{ "_id" : ObjectId("61a196693eec115ac1d576f7"), "id" : 4, "num" : 137325, "k1" : "PK", "k2" : "34VW", "dt" : "2019-07-09 16:01:41" }
{ "_id" : ObjectId("61a196693eec115ac1d576f8"), "id" : 5, "num" : 81318, "k1" : "wz", "k2" : "67KL", "dt" : "2019-07-09 16:01:41" }
{ "_id" : ObjectId("61a196693eec115ac1d576f9"), "id" : 6, "num" : 574174, "k1" : "LZ", "k2" : "wxuv", "dt" : "2019-07-09 16:01:41" }
{ "_id" : ObjectId("61a196693eec115ac1d576fa"), "id" : 7, "num" : 146558, "k1" : "ZG", "k2" : "fg23", "dt" : "2019-07-09 16:01:41" }
{ "_id" : ObjectId("61a196693eec115ac1d576fb"), "id" : 8, "num" : 649971, "k1" : "e4", "k2" : "ABxy", "dt" : "2019-07-09 16:01:41" }
{ "_id" : ObjectId("61a196693eec115ac1d576fc"), "id" : 9, "num" : 94891, "k1" : "ey", "k2" : "YZ34", "dt" : "2019-07-09 16:01:41" }
{ "_id" : ObjectId("61a196693eec115ac1d576fd"), "id" : 10, "num" : 22211, "k1" : "Sv", "k2" : "HITU", "dt" : "2019-07-09 16:01:41" }
{ "_id" : ObjectId("61a196693eec115ac1d576fe"), "id" : 11, "num" : 703342, "k1" : "2z", "k2" : "yzVW", "dt" : "2019-07-09 16:01:41" }

2. mongodump(导出)和mongorestore(导入)

2.1 mongodump参数

mongodump --help
参数说明:
-h:指明数据库宿主机的IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名字
-c:指明collection的名字
-o:指明到要导出的文件名
-q:指明导出数据的过滤条件
-j, --numParallelCollections=  number of collections to dump in parallel (4 by default)
--oplog  备份的同时备份oplog

全备

mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -o /mongodb/backup

备份单库

mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d world  -o /mongodb/backup

备份yq库下的t1集合

mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d yq -c t1  -o /mongodb/backup

压缩备份

mongodump   -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldguo -o /mongodb/backup/ --gzip

mongodump   -uroot -proot123 --port 27017 --authenticationDatabase admin -o /mongodb/backup/ --gzip

mongodump   -uroot -proot123 --port 27017 --authenticationDatabase admin -d app -c vast -o /mongodb/backup/ --gzip

备份默认的是bson的格式

ongod@m01 world]$ ll
总用量 91396
-rw-rw-r-- 1 mongod mongod 93583482 1127 10:30 city.bson
-rw-rw-r-- 1 mongod mongod      124 1127 10:30 city.metadata.json

查看

bsondump city.bson

bson转换json

bsondump city.bson > city.json

2.2 mongorestore恢复

单库的恢复

mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d yq /mongodb/backup/yq

集合的恢复

mongorestore   -uroot -proot123 --port 27017 --authenticationDatabase admin -d yq -c t1    /mongodb/backup.bak/yq.t1/bson

压缩格式的恢复

mongorestore   -uroot -proot123 --port 27017 --authenticationDatabase admin -d world -c t1  --gzip  /mongodb/backup.bak/oldboy/log1.bson.gz 

–drop表示恢复的时候把之前的集合drop掉(危险)

mongorestore  -uroot -proot123 --port 27017 --authenticationDatabase admin -d yq --drop  /mongodb/backup/oldboy
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长安有故里y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值