类型:编程控件大小:191KB语言:中文评分:6.6标签:立即下载MongoDB是基于分布式文件存储的数据库。用c语言写的。它旨在为WEB应用程序提供可扩展的高性能数据存储解决方案。MongoDB是分布式文档数据库,支持类似封闭数据库的主从结构。文档以二进制Json的形式存储,没有锁、事务和索引。1.MongoDB的启动和停止
前面已经讨论过MongoDB的启动,但是需要注意的是,MongoDB在启动时有很多可配置的启动选项。在命令行上运行mongod -help查看所有选项。
其中之一就是- config,可以支持从文件中获取配置项信息。例如:
1d : mongod-config MongoDB . conf
配置文件的内容如下:
1端口=55862 3 logpath=mongodb.log4 5 …
注意:文件中以#开头的行是注释;指定选项的语法是“选项=值”的这种形式,其中选项区分大小写;在命令行上,诸如- fork这样的开关选项应该设置为true。
停止MongoDB服务的安全方法是使用shutdown命令,即{“shut down”: 1 },这是在admin数据库下使用的管理命令。外壳提供如下辅助功能:
1使用admin2 3切换到db admin 4 5 db . shuttdowserver();6 7服务器应该已关闭…
如果MongoDB服务器是终端上运行的前台进程,可以直接关闭命令行窗口。
2.安全和认证
每个MongoDB实例中的数据库可以有许多用户。如果启用了安全检查,则只有数据库身份验证用户可以执行读取或写入操作。将用户添加到数据库,如下所示:
1使用test 2 3db . addUSer(“test _ USer”、“efgh”)
addUser()函数中的第三个参数是可选的true或false,指示用户是只读的。
注意:添加用户不仅可以添加用户,还可以修改用户密码或只读状态。
要打开安全检查,请重新启动服务器并添加- auth命令行选项。然后通过shell重新连接到数据库,如下所示:
1使用test 2 db . auth(“test _ user”,“efgh”)
之后,用户可以在自己的权限内操作。
数据库的用户帐户以文档的形式存储在system.users集合中。文件的结构如下:
1 {“user”:用户名,“ReadOnly”: true,“pwd”:密码哈希}
密码哈希是根据用户名和密码生成的哈希。
当用户进行身份验证时,服务器绑定身份验证和连接来跟踪身份验证。因此,如果驱动程序或工具使用连接池或故障转移到另一个节点,所有经过身份验证的用户都必须重新验证每个新连接。有些驱动程序可以使这一步透明,但如果不透明,将手动完成。
除了身份验证,还有许多选项值得考虑来锁定MongoDB实例。建议将MongoDB服务器设置在防火墙后或只有应用服务器才能访问的网络中。但是,如果必须可以从外部访问MongoDB,建议使用-—bindip选项,该选项可以指定MongoDB绑定到的本地ip地址。例如,它只能从本机应用程序服务器访问,您可以运行“Mongodbindiplocalhost”。
3.数据文件备份
MongoDB的所有数据都在数据目录(/data/db/)中,备份MongoDB就是创建数据目录中所有文件的副本。但是,在运行MongoDB时复制数据目录是不安全的。
Mongodump是MongoDB自带的工具,运行MongoDB时可以备份数据。用法如下:
1 D: mongodump -d测试-o备份
-d指定要备份的数据库,-o指定备份文件所在的目录,该目录将在此自动创建。
MongoDB还提供了mongorestore,一个从备份中恢复数据的工具。用法如下:
1 D: mongorestore -d foo - drop备份/测试/
-d指定要恢复的数据库,而- drop表示在恢复之前删除集合(如果存在)。否则,数据将与现有的集合数据合并,这可能会覆盖某些文档。
虽然使用mongodump和mongorestore可以在不停机的情况下进行备份,但有两个问题。
(1) mongodump使用通用查询机制,因此生成的备份不一定是服务器数据的实时快照。
(2)备份时对MongoDump的查询会对其他客户端的性能产生不利影响。
因此,还有MongoDB的fsync命令,它可以在MongoDB运行时复制数据目录,而不会损坏数据。用法如下:
1使用admin 2 db . RunCommand({“fsync”: 1,“lock”: 1 });
此时,数据目录的数据是一致的,并且是数据的实时快照。由于写锁定,数据目录的副本可以安全地用作备份。备份就绪后,按如下方式解锁:
1 db。$ cmd . sys . unlock . findone();2db . current top();
运行fsync命令以确保它已解锁。
唯一可以保证实时快照而不延迟读写的备份方法是从服务器备份。