MongoDB 备份(mongodump)恢复(mongorerstore) 导出 (Mongoexport) 导入( Mongoimport)

时间:2023-03-09 23:38:57
MongoDB 备份(mongodump)恢复(mongorerstore) 导出 (Mongoexport) 导入( Mongoimport)

MongoDB 备份(mongodump)

在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。

mongodump命令可以通过参数指定导出的数据量级转存的服务器。

语法

mongodump命令脚本语法如下:

mongodump -h dbhost -d dbname -o dbdirectory
  • -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

注:

1.在备份之前,mongod服务进程是启动的

2.如果是带认证--auth启动的,需要有备份权限的账号和密码才能备份

2015-12-18T11:32:54.422+0800    Failed: error getting database names: not authorized on admin to execute command { listDatabases: 1 }

MongoDB数据恢复

mongodb使用 mongorerstore 命令来恢复备份的数据。

语法

mongorestore命令脚本语法如下:

>mongorestore -h dbhost -d dbname --directoryperdb dbdirectory
  • -h:

    MongoDB所在服务器地址

  • -d:

    需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2

  • --directoryperdb:

    备份数据所在位置,例如:c:\data\dump\test,这里为什么要多加一个test,而不是备份时候的dump,读者自己查看提示吧!

  • --drop:

    恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!

Mongoexport导出表,或者表中部分字段

1,常用命令格式

1
mongoexport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 -f 字段 -q 条件导出 --csv -o 文件名

上面的参数好理解,重点说一下:
-f    导出指字段,以字号分割,-f
name,email,age导出name,email,age这三个字段
-q    可以根查询条件导出,-q '{ "uid" : "100" }'
导出uid为100的数据
--csv 表示导出的文件格式为csv的,这个比较有用,因为大部分的关系型数据库都是支持csv,在这里有共同点

2,导出整张表

1
2
3
[root@localhost mongodb]# mongoexport -d tank -c users -o /home/zhangy/mongodb/tank/users.dat 
connected to: 127.0.0.1 
exported 4 records

3,导出表中部分字段

1
2
3
[root@localhost mongodb]# mongoexport -d tank -c users --csv -f uid,name,sex -o tank/users.csv 
connected to: 127.0.0.1 
exported 4 records

4,根据条件敢出数据

1
2
3
[root@localhost mongodb]# mongoexport -d tank -c users -q '{uid:{$gt:1}}' -o tank/users.json 
connected to: 127.0.0.1 
exported 3 records

Mongoimport导入表,或者表中部分字段

1,常用命令格式

1.1,还原整表导出的非csv文件
mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名
--upsert --drop 文件名 
重点说一下--upsert,其他参数上面的命令已有提到,--upsert
插入或者更新现有数据
1.2,还原部分字段的导出文件
mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库
-c 表名 --upsertFields 字段 --drop 文件名 

--upsertFields根--upsert一样
1.3,还原导出的csv文件
mongoimport -h IP --port 端口
-u 用户名 -p 密码 -d 数据库 -c 表名 --type 类型 --headerline --upsert --drop 文件名 

上面三种情况,还可以有其他排列组合的。

2,还原导出的表数据

1
2
3
[root@localhost mongodb]# mongoimport -d tank -c users --upsert tank/users.dat 
connected to: 127.0.0.1 
Tue Dec 3 08:26:52.852 imported 4 objects

3,部分字段的表数据导入

[root@localhost mongodb]# mongoimport -d tank -c users  --upsertFields
uid,name,sex  tank/users.dat 
connected to: 127.0.0.1 
Tue Dec  3
08:31:15.179 imported 4 objects

4,还原csv文件

1
2
3
[root@localhost mongodb]# mongoimport -d tank -c users --type csv --headerline --file tank/users.csv 
connected to: 127.0.0.1 
Tue Dec 3 08:37:21.961 imported 4 objects

Linux下自动备份Mongodb数据库并删除指工定天数前的备份

具体操作:

1、创建Mongodb数据库备份目录

mkdir -p /home/backup/mongod_bak/mongod_bak_now

mkdir -p /home/backup/mongod_bak/mongod_bak_list

2、新建Mongodb数据库备份脚本

vi /home/crontab/mongod_bak.sh #新建文件,输入以下代码

#!/bin/sh

DUMP=/usr/local/mongodb/bin/mongodump #mongodump备份文件执行路径

OUT_DIR=/home/backup/mongod_bak/mongod_bak_now #临时备份目录

TAR_DIR=/home/backup/mongod_bak/mongod_bak_list #备份存放路径

DATE=`date +%Y_%m_%d` #获取当前系统时间

DB_USER=username #数据库账号

DB_PASS=123456 #数据库密码

DAYS=7 #DAYS=7代表删除7天前的备份,即只保留最近7天的备份

TAR_BAK="mongod_bak_$DATE.tar.gz" #最终保存的数据库备份文件名

cd $OUT_DIR

rm -rf $OUT_DIR/*

mkdir -p $OUT_DIR/$DATE

$DUMP -u $DB_USER -p $DB_PASS -o $OUT_DIR/$DATE #备份全部数据库

tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE #压缩为.tar.gz格式

find $TAR_DIR/ -mtime +$DAYS -delete #删除7天前的备份文件

:wq! #保存退出

系统运维 www.osyunwei.com 温馨提醒:qihang01原创内容©版权所有,转载请注明出处及原文链接

3、修改文件属性,使其可执行

chmod +x /home/crontab/mongod_bak.sh

4、修改/etc/crontab #添加计划任务

vi /etc/crontab #在下面添加

30 1 * * * root /home/crontab/mongod_bak.sh #表示每天凌晨1点30执行备份

5、重新启动crond使设置生效

/etc/rc.d/init.d/crond restart

chkconfig crond on #设为开机启动

service crond start #启动

每天在/home/backup/mongod_bak/mongod_bak_list目录下面可以看到mongod_bak_2015_02_28.tar.gz这样的

压缩文件。

至此,Linux下自动备份Mongodb数据库并删除指定天数前的备份完成。

附录:Mongodb数据库恢复

恢复全部数据库:

mongorestore --drop --directoryperdb  /home/backup/mongod_bak/mongod_bak_now/2015_02_28/

恢复单个数据库:

mongorestore --drop -d dataname --directoryperdb /home/backup/mongod_bak/mongod_bak_now/2015_02_28/dataname

--drop参数:恢复数据之前删除原来数据库数据,避免数据重复。

--directoryperdb参数:数据库备份目录

-d参数:后面跟要恢复的数据库名称

转:http://www.osyunwei.com/archives/8985.html