Mongodb 备份与恢复
1 mongodb常用命令
数据库备份、还原,mongodump、mongorestore、mongoimport、mongoexport
导出工具mongoexport
Mongodb中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项,也可以根据指定的条件导出数据。
参数 参数说明
-h 主机的IP
-u 用户名
-p 密码
-d 数据库的名字
-c collection的名字
-f 要导出那些列
-o 到要导出的文件名
-q 导出数据的过滤条件
--type 文件类型
--authenticationDatabase 验证数据的名称
mongoexport备份实践
备份test库下的table1集合
[mongodb@hongquan1 bk_mongodb]$ /usr/local/mongodb/bin/mongoexport -h 192.168.20.118:28002 -u'dba' -p'dba' --authenticationDatabase admin \
> -d test -c table1 -o /data/bk_mongodb/table1.dat
2018-03-12T06:37:48.619+0800 connected to: 192.168.20.118:28002
2018-03-12T06:37:48.630+0800 exported 1000 records
导出CSV格式的数据
[mongodb@hongquan1 bk_mongodb]$ /usr/local/mongodb/bin/mongoexport -h 192.168.20.118:28002 -u'dba' -p'dba' --authenticationDatabase admin \
> -d test -c table1 --type=csv -f id,test1 -o /data/bk_mongodb/table1_csv.dat
2018-03-12T06:52:19.493+0800 connected to: 192.168.20.118:28002
2018-03-12T06:52:19.505+0800 exported 1000 records
导入工具mongoimport
Mongodb中的mongoimport工具可以把一个特定格式文件中的内容导入到指定的collection中。该工具可以导入JSON格式数据,也可以导入CSV格式数据。
-q 导出数据的过滤条件
--drop 插入之前先删除原有的
--headerline 第一行是列名,不需要导入
-j 同时运行的插入操作数(默认为1),并行
mongoimport恢复实践
db.table1.save({id:1001,"test1":"testval11001"})
MyMongo:PRIMARY> db.table1.count()
将之前恢复的数据导入
/usr/local/mongodb/bin/mongoimport -h 192.168.20.118:28002 -u'dba' -p'dba' --authenticationDatabase admin \
-d test -c table1 --drop /data/bk_mongodb/table1.dat
将之前恢复的CSV格式数据导入
[mongodb@hongquan1 bk_mongodb]$ /usr/local/mongodb/bin/mongoimport -h 192.168.20.118:28002 -u'dba' -p'dba' --authenticationDatabase admin \
> -d test -c table1 --type=csv --headerline --drop /data/bk_mongodb/table1_csv.dat
2018-03-12T06:58:44.621+0800 connected to: 192.168.20.118:28002
2018-03-12T06:58:44.621+0800 dropping: test.table1
2018-03-12T06:58:44.664+0800 imported 1000 documents
实验 mysql数据迁移至mongodb数据库
将mysql数据库中的mysql下的user表导出
(system@127.0.0.1:3306) [(none)]> select user,host from mysql.user
-> into outfile '/data/mysqldata/loadfile/user.csv'
-> fields terminated by ','
-> optionally enclosed by '"'
-> escaped by '"'
-> lines terminated by '\r\n';
Query OK, 10 rows affected (0.00 sec)
在mongodb中导入数据
--f与headerline 不能共存?
[mongodb@hongquan1 bk_mongodb]$ /usr/local/mongodb/bin/mongoimport -h 192.168.20.118:28002 -u'dba' -p'dba' --authenticationDatabase admin \
> -d test -c mysqluser -f user,host --type=csv --drop /data/mysqldata/loadfile/user.csv
2018-03-12T07:19:44.076+0800 connected to: 192.168.20.118:28002
2018-03-12T07:19:44.076+0800 dropping: test.mysqluser
2018-03-12T07:19:44.103+0800 imported 10 documents
MyMongo:PRIMARY> db.mysqluser.find()
{ "_id" : ObjectId("5aa5b9906bcc4e18a8328c12"), "user" : "maxscale_route", "host" : "%" }
{ "_id" : ObjectId("5aa5b9906bcc4e18a8328c13"), "user" : "system", "host" : "%" }
{ "_id" : ObjectId("5aa5b9906bcc4e18a8328c14"), "user" : "system", "host" : "127.0.0.1" }
2 mongodump/mongorestore
mongodump备份工具
mongodump的参数与mongoexport的参数基本一致
--gzip 备份时压缩
--oplog use oplog for taking a point-in-time snapshot
[root@mysqlt1 28002]# /usr/local/mongodb/bin/mongodump --help
mongodump实践
全库备份
[mongodb@hongquan1 bk_mongodb]$ /usr/local/mongodb/bin/mongodump -h 192.168.20.118:28002 -u'dba' -p'dba' --authenticationDatabase admin \
> -o /data/bk_mongodb/full
[mongodb@hongquan1 full]$ ll #config,local未在备份里面
total 12
drwxrwxr-x 2 mongodb mongodb 4096 Mar 12 07:24 admin
drwxrwxr-x 2 mongodb mongodb 4096 Mar 12 07:24 mydb
drwxrwxr-x 2 mongodb mongodb 4096 Mar 12 07:24 test
MyMongo:PRIMARY> show dbs;
admin 0.000GB
config 0.000GB
local 0.001GB
mydb 0.000GB
test 0.000GB
备份test库
/usr/local/mongodb/bin/mongodump -h 192.168.20.118:28002 -u 'dba' -p 'dba' --authenticationDatabase admin \
-d test -o /data/bk_mongodb/p_test_auth_bk
/usr/local/mongodb/bin/mongodump -h 192.168.20.118:28002 -d test -o /data/bk_mongodb/p_test_20180312_28002_bk
备份test库下的table1集合
[mongodb@hongquan1 bk_mongodb]$ /usr/local/mongodb/bin/mongodump -h 192.168.20.118:28002 -u'dba' -p'dba' --authenticationDatabase admin \
> -d test -c table1 -o /data/bk_mongodb/table1_dump
2018-03-12T07:27:18.519+0800 writing test.table1 to
2018-03-12T07:27:18.521+0800 done dumping test.table1 (1000 documents)
压缩备份库
/usr/local/mongodb/bin/mongodump -h 192.168.20.118:28002 -u 'dba' -p 'dba' --authenticationDatabase admin \
-d test -o /data/bk_mongodb/test_mdump_zip.zip --gzip
压缩备份单表
/usr/local/mongodb/bin/mongodump -h 192.168.20.118:28002 -u'dba' -p'dba' --authenticationDatabase admin \
> -d test -c table1 -o /data/bk_mongodb/table1_dump.zip --gzip
mongorestore恢复实践
mongorestore与mongoimport参数类似
全库备份中恢复单库(基于之前的全库备份)
/usr/local/mongodb/bin/mongorestore -h 192.168.20.118:28002 -u'dba' -p'dba' --authenticationDatabase admin \
-d test --drop /data/bk_mongodb/full/test
恢复test库
/usr/local/mongodb/bin/mongorestore -h 192.168.20.118:28002 -u'dba' -p'dba' --authenticationDatabase admin \
-d test /data/bk_mongodb/test_mdump_zip/test
恢复test库下的table1集合
/usr/local/mongodb/bin/mongorestore -h 192.168.20.118:28002 -u'dba' -p'dba' --authenticationDatabase admin \
-d test /data/bk_mongodb/test_mdump_zip/test/table1.bson
--drop参数实践恢复,#还原之前先删除原来数据库(集合)
/usr/local/mongodb/bin/mongorestore -h 192.168.20.118:28002 -u'dba' -p'dba' --authenticationDatabase admin \
-d test --drop /data/bk_mongodb/test_mdump_zip/test
/usr/local/mongodb/bin/mongorestore -h 192.168.20.118:28002 -u'dba' -p'dba' --authenticationDatabase admin \
-d test --drop /data/bk_mongodb/test_mdump_zip/test/table1.bson