MongoDB/备份
mongodump:
在MongoDB中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。
./bin/mongodump -h dbhost -d dbname -o yourdirectory
./bin/mongodump --host mongodb.example.net --port 27017 --db test --collection some --username usr --password pwd --gzip yourdirectory
如果不带任何参数直接执行mongodump,那么它会去连接本地27017端口上的MongoDB实例,并且会创建名为dump的备份。
在指定了collection的情况下,使用--query
参数备份部分数据。
./bin/mongodump -h dbhost -d dbname -c cname -q '{ "uid" : "100" }' -o dbdirectory
--gzip
表示是否压缩备份。
在MongoDB未启动时,用以下命令,在这种方式下不需要运行mongod实例,如果已经运行了,必须要停掉。
./bin/mongodump --dbpath /data/db --out /data/backup --db test --username usr--password pwd
mongorestore:
恢复使用mongorestore命令
./bin/mongorestore -h dbhost -d dbname dbdirectory
./bin/mongorestore --host mongodb.example.net --port 27017 --db test --collection some --username usr --password pwd /data/backup
在指定了collection的情况下,使用--query
参数恢复部分数据。
在MongoDB未启动时,用以下命令
./bin/mongorestore --dbpath /data/db --journal /data/backup
mongoexport:
使用mongoexport,需指定collection。
./bin/mongoexport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 -f 字段 -q 条件导出 --type=csv -o 文件名
- -f 导出指字段,以字号分割,-f name,email,age表示导出name,email,age这三个字段。
- -q 可以根查询条件导出,-q '{ "uid" : 100 }' 导出uid为100的数据。
- --type=csv 表示导出的文件格式为csv的。导出csv必须声明-f字段。
./bin/mongoexport -d dbname -c cname --type=csv -q '{"type":"channel"}' -f uid,name,sex -o /usr/local/mongodb/users.csv
./bin/mongoexport -d dbname -c cname -q '{uid:{$gt:1}}' -o /usr/local/mongodb/users.json
如果导出json文件,集市指定字段不包括_id,也都会自动包含_id,csv则不会。
mongoimport:
还原全部字段:
./bin/mongoimport -d dbname -c cname --upsert /usr/local/mongodb/users.json
还原部分字段(默认包含_id):
./bin/mongoimport -d dbname -c cname --upsertFields uid,name,sex /usr/local/mongodb/users.json
导入csv文件:
./bin/mongoimport -d myinfo -c usertedails_imported_csv_partial --type csv --headerline /usr/local/mongodb/users.csv
若导出csv时,未包含_id字段,则会新建_id。
- --upsert,upsertFields 插入或者更新现有数据。
- --headerline表示csv第一行是列名不用导入。
备份分片也相同。-h和-p改为mongos的地址和端口即可。