MongoDB备份与恢复

匿名 (未验证) 提交于 2019-12-03 00:41:02

转自:https://www.cnblogs.com/shilin000/p/5248177.html

   https://www.cnblogs.com/timelesszhuang/p/5906068.html

mongodb的备份有两种方式:

1.直接拷贝数据目录下的一切文件

2.使用mongodump方式

下面一一说明:

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方式:

使用mongodump备份比较慢,在备份复制集时还有些问题,后续会说到。但是,用来备份单个数据库、集合、子集合还是比较好的方法。

mongodump -h 127.0.0.1 -u admin -p xxx  -d blog -o ‘/home/timeless/桌面/mongodump‘ --authenticationDatabase admin
Failed: error connecting to db server: server returned error on SASL authentication step: Authentication failed.   //提示认证失败
# ./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

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版本最好相匹配。

原文:https://www.cnblogs.com/zlf1/p/9337749.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!