设为首页 收藏本站
查看: 853|回复: 0

[经验分享] MongoDB的管理

[复制链接]

尚未签到

发表于 2015-7-6 10:17:54 | 显示全部楼层 |阅读模式
  写这篇随笔时,说实话我心里是虚的,由于本人的能力有限,也从未接触过项目数据库的实际实施、管理工作,像集群啊、分片等高级知识点也只是概念上的了解,所以下面写的内容是我在看相关知识点时总结的、自己觉得有用的、较少的管理技巧,同时也希望有数据库管理与实施经验的高手能够在这儿发表一些见解和链接,供我们学习,在此表示感谢。
  1.  MongoDB的启动与停止
  MongoDB的启动之前已经谈过,但是需要注意的MongoDB在启动时有很多可配置的启动选项。在命令行运行mongod –help可以查看所有选项。
  其中有一项是--config,可以支持从文件中获取配置项信息。例如:



1 D:\> mongod --config mongodb.conf
  配置文件中的内容如下:



1 port = 5586
2
3 logpath = mongodb.log
4
5 …
  注意:文件中以#开头的行是注释;指定选项的语法就是这种“选项=值”的形式,其中选项是区分大小写的;命令行中那些如--fork的开关选项,其值要设为true。
  一种稳妥的停止MongoDB服务的方式就是使用shutdown命令,即{“shutdown” : 1},这是管理命令,要在admin数据库下使用。shell提供了辅助函数,如下:



1 >use admin
2
3 switched to db admin
4
5 >db.shutdownServer();
6
7 server should be down…
  若MongoDB服务器是最为前台进程运行在终端,那么可以直接关闭命令行窗口即可。
  2. 安全和认证
  每个MongoDB实例中的数据库可以有许多用户,如果开启了安全性检查,则只有数据库认证用户才能执行读或者写操作。在数据库中添加用户,如下所示:



1 >use test
2
3 >db.addUser(“test_user”, “efgh”)
  addUser()函数中的第三个参数为可选项true或者false,表示该用户是否为只读用户。
  注意:addUser不仅能添加用户,还能修改用户口令或者只读状态。
  要开启安全性检查,重启服务器,同时加--auth命令行选项。然后通过shell重新连接数据库,操作如下:



1 >use test
2 >db.auth(“test_user”, “efgh”)
  之后用户就可以在自己的权限范围内进行操作了。
  数据库的用户账户以文档的形式存储在system.users集合里面。文档的结构如下:



1 {“user” : username, “readOnly” : true, “pwd” : password hash}
  其中password hash是根据用户名和密码生成的散列。
  用户认证时,服务器将认证和连接绑定来跟踪认证。所以如果驱动程序或是工具使用了连接池或是因故障切换到另一个节点,所有认证用户必须对每个新连接重新认证。有的驱动程序能够将这步透明化,但要是没有,就得手动完成了。
  除了认证还有许多选项值得考虑来锁定MongoDB实例。建议将MongoDB服务器布置在防火墙后或者布置在只有应用服务器能访问的网络中。但要是MongoDB必须能被外面访问到的话,建议使用—bindip选项,可以指定mongod绑定到的本地IP地址。例如,只能从本机应用服务器访问,可以运行“mongod –bindip localhost”。
  3. 数据文件备份
  MongoDB的所有数据都在数据目录(/data/db/)下,备份MongoDB就是创建数据目录中所有文件的副本。但是在运行MongoDB时复制数据目录是不安全的。
  Mongodump是MongoDB自带的工具,它能在运行MongoDB时备份数据。用法如下:



1 D:\> mongodump -d test -o backup
  -d指定了要备份的数据库,-o指定了备份文件所在的目录,这里会自动创建该目录。
  MongoDB还提供了从备份中恢复数据的工具mongorestore。用法如下:



1 D:\> mongorestore -d foo --drop backup/test/
  -d指定了要恢复的数据库,--drop代表在恢复前删除集合(若存在)。否则数据就会与现有集合数据合并,可能会覆盖一些文档。
  虽然使用mongodump和mongorestore能不停机备份,但有两个问题。
(1)       mongodump使用普通的查询机制,所以产生的备份不一定是服务器数据的实时快照。
(2)       mongodump备份时的查询会对其他客户端的性能产生不利影响。
  所以还有MongoDB的fsync命令能在MongoDB运行时复制数据目录还不会损毁数据。用法如下:



1 >use admin
2 >db.runCommand({“fsync” : 1, “lock” : 1});
  至此,数据目录的数据就是一致的,且为数据的实时快照,因为上了写入锁,可以安全地将数据目录副本用做备份。备份好了,就要解锁,如下:



1 >db.$cmd.sys.unlock.findOne();
2 >db.currentOp();
  运行fsync命令是为了确保已经解锁了。
  唯一不耽误读写还能保证实时快照的备份方式就是通过从服务器备份。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-83737-1-1.html 上篇帖子: mongodb高级操作及在Java企业级开发中的应用. 下篇帖子: MongoDB学习之路 (五):更新操作符(Update Operators).2nd
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表