1.数据的备份和恢复 和 常见错误
备份单个库:
mongodump -u 账号 -p 密码 --port 27017 --authenticationDatabase admin -d 库名 -o 目录名(备份至..)
恢复单个库:
mongorestore -u 账号 -p 密码 --port 27017 --authenticationDatabase admin -d 库名 目录名(数据的备份所在目录)
详细如下:
mongodump/mongorestore | |
---|---|
主要用途 | 简单且高效的小型的MongoDB的数据库的备份/恢复 |
导出格式 | bson |
额外说明 | 不适合备份/恢复大型MongoDB数据库,默认是不拷贝local这个(特殊的)数据库 |
经验/结论 | 支持普通导出单个db的所有的collection,建议:普通的,简单的,数据的备份和恢复,都还是用mongodump/mongorestore这套工具 |
1、当想备份单独的数据库、集合甚至集合中的子集时mongodump是个很好的选择。
2、如果运行mongod时使用了–replSet选项,则可使用mongodump的–oplog选项。这会将转储过程中服务器进行的所有操作记录下来,这样在恢复备份时就会重新执行这些操作。这样就可以得到源服务器上某一时间点的数据快照。
3、如果转储数据库时使用了–oplog参数,运行mongorestore时必须使用–oplogReplay选项,以得到某一时间点的快照。
--备份单个表
mongodump -u superuser -p 123456 --port 27017 --authenticationDatabase admin -d myTest -c d -o /backup/mongodb/myTest_d_bak_201507021701.bak
--备份单个库
mongodump -u superuser -p 123456 --port 27017 --authenticationDatabase admin -d myTest -o /backup/mongodb/
--备份所有库
mongodump -u superuser -p 123456 --authenticationDatabase admin --port 27017 -o /root/bak
--备份所有库推荐使用添加--oplog参数的命令,这样的备份是基于某一时间点的快照,只能用于备份全部库时才可用,单库和单表不适用:
mongodump -h 127.0.0.1 --port 27017 --oplog -o /root/bak
--同时,恢复时也要加上--oplogReplay参数,具体命令如下(下面是恢复单库的命令):
mongorestore -d swrd --oplogReplay /home/mongo/swrdbak/swrd/
--恢复单个库:
mongorestore -u superuser -p 123456 --port 27017 --authenticationDatabase admin -d myTest /backup/mongodb/
--恢复所有库:
mongorestore -u superuser -p 123456 --port 27017 --authenticationDatabase admin /root/bak
--恢复单表
mongorestore -u superuser -p 123456 --authenticationDatabase admin -d myTest -c d /backup/mongodb/myTest_d_bak_201507021701.bak/myTest/d.bson
常见错误:
1.Failed: error writing data for collection myshlr._LoginLog
to disk: error reading collection: Failed to parse: { find: “_LoginLog”, skip: 0, snapshot: true, $readPreference: { mode: “secondaryPreferred” }, $db: “myshlr” }. Unrecognized field ‘snapshot’.
–这是版本不匹配, mongodump 后面加个参数 “ --forceTableScan ” 就可以了。
mongodump --forceTableScan -u 账号 -p 密码 --port 27017 --authenticationDatabase admin -d 库名 -o 到处的目录。