备份和迁移
两种备份的区别
mongoexport/mongoimport | mongodump/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 11月 27 10:30 city.bson
-rw-rw-r-- 1 mongod mongod 124 11月 27 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