mongodb启动

摘要:
MongoDB是一个基于分布式文件存储的数据库。MongoDB还提供了从备份中恢复数据的工具mongorestore。虽然使用mongodump和mongorestore能不停机备份,但有两个问题。mongodump备份时的查询会对其他客户端的性能产生不利影响。

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可护展的高性能数据存储解决方案。MongoDB是一款分布式文档数据库,支持类似关型数据库的主从结构,文档以二进制Json形式存储,无锁,无事务,有索引。
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命令是为了确保已经解锁了。

唯一不耽误读写还能保证实时快照的备份方式就是通过从服务器备份。

免责声明:文章转载自《mongodb启动》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇FCOS代码解读工作流调度器azkaban(以及各种工作流调度器比对)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

配置CNPM-基础案例

下面给出一个样例配置: JavaScript module.exports = { enableCluster: true, database: { db: "snpm", username: "username", password: "password", dialect: "mysql", host: "127.0.0.1", port: 3306...

区分NoSQL数据库

NoSQL数据库都有哪些?在本文中,我们将介绍不同的NoSQL数据库的种类,并比较不同NoSQL数据库之间的异同。在文末,我们也将也将分享一些有用的资源,帮助初学者快速开始使用NoSQL。 NoSQL数据库之间的异同 市场上有多种不同的NoSQL数据库,他们之间有一些关键的区别。 数据模型 我们可以根据NoSQL数据库所支持的不同数据模型对其进行分类。有...

windows上备份mysql数据库

方案一:采用mysql自带的工具mysqldump。 脚本文件backup.bat如下: set  "YMD=%date:~,4%%date:~5,2%%date:~8,2%"cd    /d   C:\Program Files\MySQL\MySQL Server 5.7\binmysqldump  --no-defaults    -uroot   ...

mysql安装使用

  linux系统 mysql-5.7.14-linux.zip部署包支持在CentOS 6.x/7.x 服务器硬盘大小要求     a) /data/mysql_data  如果存在该独立分区,要求该分区 >10G b) 如果仅存在 /data 分区, 要求该分区 >10G c) 否则,要求根分区/ > 10G MySQL_INST...

oracle11g数据库导入、导出操作

一、在linux系统中导入数据库。 1.linux中先输入 su - oracle下切换到oracle用户。然后以sysdba打开sqlplus:sqlplus / as sysdba 然后创建表空间和用户如下2.首先新建用户和表空间(表空间大小和自增大小按自己需求调整):新建表空间和临时表空间create tablespace XXX_DATAloggi...

Hibernate一级缓存、二级缓存

缓存就是把以前从数据库中查询出来和使用过的对象保存在内存中,准确说就是一个数据结构中,这个数据结构通常是或类似HashMap,当以后要使用某个对象时,先查询缓存中是否有这个对象,如果有则使用缓存中的对象,如果没有则去查询数据库,并将查询出来的对象保存在缓存中,以便下次使用。 1、缓存的伪代码: DAO { HashMap map = new Ma...