6. 备份恢复-mongoexport
1. 备份恢复工具¶
#1.mongoexport/mongoimport
导入、导出的是json或csv格式
#2.mongodump/mongorestore
导入、导出的是bson格式
#3.json和bson区别
json可读性强但体积较大
bson是二进制文件,体积小但对人几乎没有可读性
2. 跨版本迁移¶
#1.注意问题
1.在一些mongodb版本之间,bson格式可能会随版本不同而有所不同,所以不同版本之间用mongodump、mongorestore可能不会成功,具体看版本之间的兼容性。
2.当无法使用bson进行跨版本的数据迁移的时候,使用json格式是一个可选项。
3.跨版本的mongodump/mongorestore个人并不推荐,实在要做请先检查文档查看连个版本是否兼容(大部分时候是的)。
4.json虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引、账户等其他基础信息。使用时应该注意。
#2.迁移分类
2.1 异构平台迁移:MySQL---mongodb
2.2 同平台,跨大版本:mongodb2---mongodb3
#以上都可以使用:mongoexport/mongoimport:json csv
3. 导出工具mongoexport¶
3.1 介绍¶
mongoexport工具可以把一个collection导出成json格式或csv格式的文件。
可以通过参数指定导出的数据项,也可以根据指定的条件导出数据。
1.版本差异较大
2.异构平台数据迁移
3.2 参数说明¶
$ mongoexport --help
-h:IP
-u:用户名
-p:密码
-d:数据库名
-c:集合名
-f:指明要导出哪些列
-o:指明要导出的文件 #注意:备份文件的名字可以自定义,默认导出json格式数据
--type=csv #如果要导出csv格式的数据,则需要加入此参数
-q:指明导出数据的过滤条件
--authenticationDatabase admin #指明验证库
3.3 启动单节点¶
su - mongod
mongod -f /mongodb/conf/mongo.conf
netstat -tunlp|grep 27017
[mongod@151 ~]$ mongod -f /mongodb/conf/mongo.conf
about to fork child process, waiting until server is ready for connections.
forked process: 30019
child process started successfully, parent exiting
[mongod@151 ~]$
[mongod@151 ~]$
[mongod@151 ~]$ netstat -tunlp|grep 27017
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 30019/mongod
[mongod@151 ~]$ mongo -uroot -proot123 --port 27017 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:27017/admin
>
> show dbs
admin 0.000GB
app 0.000GB
local 0.000GB
test 0.000GB
> exit
bye
3.4 单表备份为json格式¶
mongoexport -uroot -proot123 --port 27017 --authenticationDatabase admin -d app -c log -o /mongodb/log.json
[mongod@151 ~]$ mongo -uroot -proot123 --port 27017 admin
MongoDB shell version: 3.2.22
connecting to: 127.0.0.1:27017/admin
> use app
switched to db app
> show tables;
a
b
log
>
> db.log.count()
10000
>
> exit
bye
[mongod@151 ~]$
[mongod@151 ~]$
[mongod@151 ~]$ mongoexport -uroot -proot123 --port 27017 --authenticationDatabase admin -d app -c log -o /mongodb/log.json
2021-05-13T13:37:40.756+0800 connected to: localhost:27017
2021-05-13T13:37:41.008+0800 exported 10000 records
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb/
28017 28019 38017 38019 38021 38023 38025 bin data log.json
28018 28020 38018 38020 38022 38024 38026 conf log
[mongod@151 ~]$
3.5 查看备份后的json文件¶
cat /mongodb/log.json
[mongod@151 ~]$ head /mongodb/log.json
{"_id":{"$oid":"609b554400177802e2f209b6"},"uid":0.0,"name":"mongodb","age":6.0,"date":{"$date":"2021-05-12T04:10:44.840Z"}}
{"_id":{"$oid":"609b554400177802e2f209b7"},"uid":1.0,"name":"mongodb","age":6.0,"date":{"$date":"2021-05-12T04:10:44.845Z"}}
{"_id":{"$oid":"609b554400177802e2f209b8"},"uid":2.0,"name":"mongodb","age":6.0,"date":{"$date":"2021-05-12T04:10:44.845Z"}}
{"_id":{"$oid":"609b554400177802e2f209b9"},"uid":3.0,"name":"mongodb","age":6.0,"date":{"$date":"2021-05-12T04:10:44.846Z"}}
{"_id":{"$oid":"609b554400177802e2f209ba"},"uid":4.0,"name":"mongodb","age":6.0,"date":{"$date":"2021-05-12T04:10:44.846Z"}}
{"_id":{"$oid":"609b554400177802e2f209bb"},"uid":5.0,"name":"mongodb","age":6.0,"date":{"$date":"2021-05-12T04:10:44.847Z"}}
{"_id":{"$oid":"609b554400177802e2f209bc"},"uid":6.0,"name":"mongodb","age":6.0,"date":{"$date":"2021-05-12T04:10:44.847Z"}}
{"_id":{"$oid":"609b554400177802e2f209bd"},"uid":7.0,"name":"mongodb","age":6.0,"date":{"$date":"2021-05-12T04:10:44.847Z"}}
{"_id":{"$oid":"609b554400177802e2f209be"},"uid":8.0,"name":"mongodb","age":6.0,"date":{"$date":"2021-05-12T04:10:44.848Z"}}
{"_id":{"$oid":"609b554400177802e2f209bf"},"uid":9.0,"name":"mongodb","age":6.0,"date":{"$date":"2021-05-12T04:10:44.849Z"}}
[mongod@151 ~]$
3.6 登录单节点,查看表结构¶
mongo -uroot -proot123 admin
show dbs
use app
db.log.findOne()
[mongod@151 ~]$ mongo -uroot -proot123 admin
MongoDB shell version: 3.2.22
connecting to: admin
>
> show dbs
admin 0.000GB
app 0.000GB
local 0.000GB
test 0.000GB
>
> use app
switched to db app
>
> db.log.findOne()
{
"_id" : ObjectId("609b554400177802e2f209b6"),
"uid" : 0,
"name" : "mongodb",
"age" : 6,
"date" : ISODate("2021-05-12T04:10:44.840Z")
}
>
> exit
bye
3.7 单表备份为csv格式¶
#根据上一步得到-f参数后跟的列名
mongoexport -uroot -proot123 --port 27017 --authenticationDatabase admin -d app -c log --type=csv -f uid,name,age,date -o /mongodb/log.csv
[mongod@151 ~]$ mongoexport -uroot -proot123 --port 27017 --authenticationDatabase admin -d app -c log --type=csv -f uid,name,age,date -o /mongodb/log.csv
2021-05-13T13:43:04.466+0800 connected to: localhost:27017
2021-05-13T13:43:04.633+0800 exported 10000 records
[mongod@151 ~]$
[mongod@151 ~]$ ls /mongodb
28017 28019 38017 38019 38021 38023 38025 bin data log.csv
28018 28020 38018 38020 38022 38024 38026 conf log log.json
[mongod@151 ~]$
3.8 查看csv文件¶
cat /mongodb/log.csv
[mongod@151 ~]$ head -5 /mongodb/log.csv
uid,name,age,date
0,mongodb,6,2021-05-12T04:10:44.840Z
1,mongodb,6,2021-05-12T04:10:44.845Z
2,mongodb,6,2021-05-12T04:10:44.845Z
3,mongodb,6,2021-05-12T04:10:44.846Z
4. 导入工具mongoimport¶
4.1 介绍¶
mongoimport工具可以把一个特定格式文件中的内容大都如到指定的collection中。该工具可以导入json格式和csv格式的数据
4.2 参数说明¶
$ mongoimport --help
-h:IP
-u:用户名
-p:密码
-d:数据库名
-c:集合名
-f:指明要导入哪些列
--type=csv #如果要导出csv格式的数据,则需要加入此参数
--authenticationDatabase admin #指明验证库
-j,--numInsertionWorkers=<number> number of insert operations to run
concurrently
4.3 恢复json格式表数据到log1¶
mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldboy -c log1 /mongodb/log.json
[mongod@151 ~]$ mongoimport -uroot -proot123 --port 27017 --authenticationDatabse admin -d oldboy -c log1 /mongodb/log.json
2021-05-13T13:44:36.314+0800 error parsing command line options: unknown option "authenticationDatabse"
2021-05-13T13:44:36.314+0800 try 'mongoimport --help' for more information
[mongod@151 ~]$
[mongod@151 ~]$
[mongod@151 ~]$
[mongod@151 ~]$ mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldboy -c log1 /mongodb/log.json
2021-05-13T13:44:58.122+0800 connected to: localhost:27017
2021-05-13T13:44:58.580+0800 imported 10000 documents
4.4 登录查看log1¶
mongo -uroot -proot123 admin
show dbs
use oldboy
show tables
db.log1.count()
db.log1.findOne()
[mongod@151 ~]$ mongo -uroot -proot123 admin
MongoDB shell version: 3.2.22
connecting to: admin
>
> show dbs
admin 0.000GB
app 0.000GB
local 0.000GB
oldboy 0.000GB
test 0.000GB
>
> use oldboy
switched to db oldboy
>
> show tables
log1
>
> db.log1.count()
10000
>
> db.log1.findOne()
{
"_id" : ObjectId("609b554400177802e2f209b6"),
"uid" : 0,
"name" : "mongodb",
"age" : 6,
"date" : ISODate("2021-05-12T04:10:44.840Z")
}
>
> exit
bye
4.5 恢复csv格式的文件到log2,log3¶
#1.如果csv文件的第一行有列名字,则使用此命令恢复
mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldboy -c log2 --type=csv --headerline --file /mongodb/log.csv
#2.如果csv文件的第一行没有列名字
mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldboy -c log3 --type=csv -f uid,name,age,date --file /mongodb/log3.csv
#准备log3.csv
cp /mongodb/log.csv /mongodb/log3.csv
vim /mongodb/log3.csv
删除标题行
#1.
[mongod@151 ~]$ mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldboy -c log2 --type=csv --headerline --file /mongodb/log.csv
2021-05-13T13:49:41.956+0800 connected to: localhost:27017
2021-05-13T13:49:42.304+0800 imported 10000 documents
[mongod@151 ~]$
[mongod@151 ~]$
[mongod@151 ~]$ mongo -uroot -proot123 admin
MongoDB shell version: 3.2.22
connecting to: admin
>
> use oldboy
switched to db oldboy
>
> show tables
log1
log2
>
> db.log2.findOne()
{
"_id" : ObjectId("609cbdf59a08c79261164f5d"),
"uid" : 0,
"name" : "mongodb",
"age" : 6,
"date" : "2021-05-12T04:10:44.840Z"
}
>
> exit
bye
#2.
[mongod@151 ~]$ cp /mongodb/log.csv /mongodb/log3.csv
[mongod@151 ~]$
[mongod@151 ~]$ head -2 /mongodb/log3.csv
uid,name,age,date
0,mongodb,6,2021-05-12T04:10:44.840Z
[mongod@151 ~]$
[mongod@151 ~]$ vim /mongodb/log3.csv
[mongod@151 ~]$
[mongod@151 ~]$ head -2 /mongodb/log3.csv
0,mongodb,6,2021-05-12T04:10:44.840Z
1,mongodb,6,2021-05-12T04:10:44.845Z
[mongod@151 ~]$
[mongod@151 ~]$
[mongod@151 ~]$ mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldboy -c log3 --type=csv -f uid,name,age,date --file /mongodb/log3.csv
2021-05-13T13:51:28.695+0800 connected to: localhost:27017
2021-05-13T13:51:29.730+0800 imported 10000 documents
[mongod@151 ~]$
[mongod@151 ~]$
[mongod@151 ~]$ mongo -uroot -proot123 admin
MongoDB shell version: 3.2.22
connecting to: admin
>
> use oldboy
switched to db oldboy
>
> show tables
log1
log2
log3
>
> db.log3.findOne()
{
"_id" : ObjectId("609cbe609a08c7926116766d"),
"uid" : 0,
"name" : "mongodb",
"age" : 6,
"date" : "2021-05-12T04:10:44.840Z"
}
>
> exit
bye
#3.测试有标题列的csv文件使用-f参数恢复
#命令:mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldboy -c log4 --type=csv -f uid,name,age,date --file /mongodb/log.csv
[mongod@151 ~]$ head -2 /mongodb/log.csv
uid,name,age,date
0,mongodb,6,2021-05-12T04:10:44.840Z
[mongod@151 ~]$
[mongod@151 ~]$ mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldboy -c log4 --type=csv -f uid,name,age,date --file /mongodb/log.csv
2021-05-13T13:56:28.842+0800 connected to: localhost:27017
2021-05-13T13:56:29.746+0800 imported 10001 documents
[mongod@151 ~]$
[mongod@151 ~]$
[mongod@151 ~]$ mongo -uroot -proot123 admin
MongoDB shell version: 3.2.22
connecting to: admin
>
> use oldboy
switched to db oldboy
>
> show tables
log1
log2
log3
log4
>
> db.log4.count()
10001
>
> db.log4.findOne()
{
"_id" : ObjectId("609cbf8c9a08c79261169d7d"),
"uid" : "uid",
"name" : "name",
"age" : "age",
"date" : "date"
}
> exit
bye
#发现不行,会把标题行加到数据中!!!!
4.6 登录查看log2,log3¶
mongo -uroot -proot123 admin
use oldboy
show tables
db.log2.count()
db.log2.findOne()
db.log3.count()
db.log3.findOne()
最后更新:
2022-02-20 11:21:58