mongodb的备份有两种方式:
1.直接拷贝数据目录下的一切文件
2.使用mongodump方式
3.主从复制:http://www.cnblogs.com/huangxincheng/archive/2012/03/04/2379755.html (这篇详细介绍了主从复制)
下面一一说明:
1.直接拷贝数据目录下的一切文件:
这种方式用来备份整个mongodb的数据库,不能备份单个数据库或者集合或者子集合
在拷贝过程中必须阻止数据文件发生更改。因此需要对数据库加锁,以防止数据写入.
db.fsyncLock()
上面的命令将阻塞写入操作,并将脏数据刷新到磁盘上,确保数据一致。
然后,拷贝数据文件到备份目录下
cp -R /data/db/* /backup
文件复制完成后,对数据库进行解锁,允许写操作
db.fsyncUnlock()
注意: 在执行db.fsyncLock()和db.fsyncUnlock()时,不能关闭当前的shell窗口,否则可能无法连接而需要重新启动mongod服务。
恢复时,确保mongod没有运行,清空数据目录,将备份的数据拷贝到数据目录下,然后启动mongod
cp -R /backup/* /data/db/ mongod -f mongod.conf
2.使用mongodump方式:
千万不要fsyncLock与mongodump配合使用,如果数据库被锁定了,mongodump将永远挂起。
使用mongodump备份比较慢,在备份复制集时还有些问题,后续会说到。但是,用来备份单个数据库、集合、子集合还是比较好的方法。
/usr/local/mongodb/bin/mongodump -h 127.0.0.1 -d log-idp-mongo -o /databack_data1/backups/${DATE} /usr/local/mongodb/bin/mongodump -h 127.0.0.1 -d log-hra-mongo -o /databack_data1/backups/${DATE}[root@mongo ~]#
# ./mongodump --help options: --help 显示帮助信息 -v [ --verbose ] 打印出更多信息,如时间等等 -vvvvv --version 打印版本信息 -h [ --host ] arg 指定连接的mongodb主机,复制集时设置为<set name>/s1,s2 --port arg 指定mongodb端口号,也可以这么指定--host hostname:port --ipv6 启用支持IPv6 support -u [ --username ] arg 用户名 -p [ --password ] arg 密码 --authenticationDatabase arg user source (defaults to dbname) --authenticationMechanism arg (=MONGODB-CR) authentication mechanism --dbpath arg 直接访问mongod的数据库文件,而不是连接到mongodb服务器。需要锁定数据目录,如果mongod当前在访问相同路径将不能使用。也就是说,mongod运行的情况下不能使用--dbpath,mongod未运行的情况下可以直接指定--dbpath --directoryperdb 每个db一个单独的目录,需要指定dbpath --journal 启用journaling,需要指定dbpath -d [ --db ] arg 指定数据库 -c [ --collection ] arg 指定集合 -o [ --out ] arg (=dump) 指定输出目录,"-"表示标准输出 -q [ --query ] arg json查询 --oplog 使用oplog来生产时间点快照 --repair 尝试恢复崩溃的数据库 --forceTableScan 强制表扫描,不使用$snapshot
常用的是:mongodump -h 主机 -u 用户名 -p 密码 -d 数据库 -c 集合 -o 备份目录
mongodb恢复时采用mongorestore来恢复
# ./mongorestore --help //相同部分参数意义参加上面的mongodump -v [ --verbose ] --version -h [ --host ] arg --port arg --ipv6 -u [ --username ] arg -p [ --password ] arg --authenticationDatabase arg --authenticationMechanism arg (=MONGODB-CR) --dbpath arg --directoryperdb --journal -d [ --db ] arg -c [ --collection ] arg --objcheck 在插入前验证对象,默认启用 --noobjcheck 不在插入前验证对象 --filter arg 插入前过滤 --drop 在插入前删除所有文档 --oplogReplay 在恢复时应用oplog --oplogLimit arg include oplog entries before the provided Timestamp (seconds[:ordinal]) during the oplog replay; the ordinal value is optional --keepIndexVersion don't upgrade indexes to newest version --noOptionsRestore don't restore collection options --noIndexRestore don't restore indexes --w arg (=0) minimum number of replicas per write
恢复整个mongodb的数据库:
mongorestore -p 27017 dump/
恢复到特定的库和集合:
mongorestore --db ttlsa_com --collection posts dump/old_ttlsa_com/old_posts.bson
注意: mongodump和mongorestore版本最好相匹配。