前端时间,被领导叫去配置linux上mongodb的副本集,遇到不少问题,稍微总结一下
-
安装mongodb的问题,参考官网手册,没啥好说的
-
遇到一个诡异的问题,每次用systemctl启动mongodb的进程时,总会在90s左右,mongodb会被关闭,看mongodb日志说启动失败,后来一顿谷歌,发现是TimeoutStartSec问题,但是尝试修改该值,始终不成功,还是对systemd的进程配置方式不熟!!
后来没办法,采用了&的方式启动,linux还是要多学啊o(╥﹏╥)o
mongod -f /etc/mongod.conf & //最终采用这种方式启动mongodb
show mongod.service -p TimeoutStartSec //查看你的mongodb启动时间限制
MongoDB: Can’t initiate replica set; ‘has data already, cannot initiate set’
这个问题,是在执行rs.initiate(config)时遇到的 stackoverflow传送门
具体的问题是当执行这个命令的时候,只能主节点节点有数据,从节点不能有数据(我就是自作聪明的在从节点也建立用户,导致出现了这个问题!)
Server returned error on SASL authentication step: Authentication failed
这个问题是在当我mongostore的时候,需要加上authenticationDatabase指定认证数据库!
//完整的命令
mongorestore -u xxxx -p xxx -h 127.0.0.1:27017 --authenticationDatabase 认证数据库 -d 需要恢复的数据库名字 /opt/mongodb_download/baakup
//网上的参考
--备份单个表
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
可以参考Mongo的备份和恢复(mongodump 和mongorestore )
mongodump与mongoexport的区别:
- mongodump导出的是bson格式,是二进制形式,不过可以使用mongo自带的bsondump命令查看里面的数据,而mongoexport导出的则是文本,可以是csv、json格式。
- JSON可读性强但体积较大,BSON则是二进制文件,体积小但对人类几乎没有可读性。
- 在一些mongodb版本之间,BSON格式可能会随版本不同而有所不同,所以不同版本之间用mongodump/mongorestore可能不会成功,具体要看版本之间的兼容性。当无法使用BSON进行跨版本的数据迁移的时候,使用JSON格式即mongoexport/mongoimport是一个可选项。跨版本的mongodump/mongorestore个人并不推荐,实在要做请先检查文档看两个版本是否兼容(大部分时候是的)。
- JSON虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引,账户等其他基础信息。使用时应该注意。
keyfile的配置
必须保证keyfile在副本集一台机器生成后,复制给副本集中其他机器,即服务器上keyfile的配置保持一致