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