mongodb使用

第一章 mongodb产品日常维护

1.1  启停操作

1.1.1 启动mongodb

在没有做全局变量的情况下需要cd到/home/mongodb/mongodb/bin/来执行以下命令

./mongod –f /home/mongodb/mongodb/mongodb.conf

在/home/mongodb/目录下有个script目录中有启动脚本。

1.1.2 停止mongodb

在库中切换到admin库 use admin

执行db.(“root”,”root123”)来通过用户验证。

执行db.shutdownServer();命令

./mongod –f /home/mongodb/mongo/mongodb.conf –shutdown也可以停掉mongodb

在/home/mongodb/目录下有个script目录中有启动脚

本和关闭脚本还有备份脚本,也可以使用脚本来停止mongodb。如下:

./mongodb-shutdown.sh 来关闭mongodb。

./mongodb-start.sh 来启动mongodb

./mongodb-backup.sh 来备份mongodb。

1.1.3 状态检查

状态检查,在mongodb的目录下/monitor/目录下有定时巡检的脚本,监控状态,作为每分钟执行一次脚本。脚本输出的结果在/home/mongodb/monitor/logs下。在crontab –e中写入 * * * * * /home/mongodb/monitor/mongodb-monitor.sh来设置脚本执行的时间。

1.1.4 状态检查

可以用netstat –an | grep 27017 命令来查看程序是不在运行。

 

 

 

1.2  增加节点

在生产环境中,添加节点要进入主库中,use admin到admin库下,来执行

rs.add 命令如下图:

 

添加完节点需要,不需要初始化副本集,如添加节点使节点的总数变成基数,必须要添加仲裁者,在集群的节点宕机一半以上就会选举不了主节点,所以必须添加仲裁节点。

1.2.1 添加仲裁节点

仲裁者是一个不存储数据,不当主节点,只参加选举的节点。

添加仲裁节点要先在集群内的主机找个压力相对比较小的服务器,来搭建仲裁节点,下面来添加仲裁节点命令如下:

解压mongodb的tar.gz包。创建数据路径和日志路径:

mkdir  -p /home/data

mkdir –p /home/logs

创建mongodb.conf文件来写入以下命令,

dbpath=/home/data   定义仲裁节点的数据路径

logpath=/home/logs/mongod.log    定义仲裁的日志路径

replSet=repset    和要加入集群的名称一致

fork=true  开启后台运行

port=30000  仲裁者端口号

(如果要添加的集群已开启用户认证,仲裁节点也必须要开启用户认证。)

启动仲裁节点,

./mongod –f /home/mongodb/mongodb.conf来启动仲裁

如果是一台机器上安装了两个mongodb服务,而不同端口号。

当要进入mongodb数据库时就要指定端口号如下:

./mongo –port 30000 进入仲裁节点。

在主节点上添加仲裁节点:

rs.addArd(“要添加的节点和端口”)来添加仲裁节点。

 

把仲裁节点关闭。开启用户认证,再开启节点。

1.3 删除节点

使用use admin进入admin库中执行以下命令

rs.remove命令来删除节点,如下图:

 

如出现ok 1证明删除成功。

1.4 节点权重的查看

在mongodb中无论要如何设置和更改一些配置都要进入admin库中,use admin

用rs.conf 命令来查看priority值:

 

 

1.5 设置权重值

设置节点权重值命令如下:

1)   PRIMARY> config=rs.conf()
2)PRIMARY>config.members[3].priority=3
3)PRIMARY> rs.reconfig(config)

这些操作必须在Primary上进程。

[]中的3不是节点的id号,是rs.conf出来的顺序。

 

 

第二章 用户安全认证

2.1 创建秘钥

先创建一个管理用户(root),再给想要存储的库创建角色,比如(test库中的用户。)

要用户安全认证,是要通过秘钥来通信来保证数据库安全连接,用以下命令创建秘钥:

touch /home/mongodb/mongodb.key

在赋予权限

Chmod 600 mongodb.key

  • openssl rand –base64 666 > /home/mongodb/mongodb.key

 

     通信秘钥会重定向到mongodb.key文件中。把秘钥粘贴到其他服务器的同样文件下。

 

在启动文件中,写入以下内容

 

注意事项:(每台服务器的上面都要有一样的秘钥,和指定通信秘钥文件的位置。)

2.2 修改启动文件

开启用户认证选项:auth=true命令来开启mongodb数据库的用户认证。修改完重启mongodb服务。如下图

 

2.3 验证用户认证

在没有认证的时候是没法看库的容量的。如下图:

 

用以下命令来开启用户认证:

db.auth(“yitong”,”yitong123”)来认证用户如下图:

 

用 show dbs 来查看库

 

如能看到,证明认证完成。

2.4 添加用户

在mongodb中,默认是 没有用户的,我们要先添加一个超级管理员的用户

use admin 进入admin库中,
db.createUser(
{user:'user',  创建user超级用户

 pwd:'passwd', 用户密码为 passwd
 roles:[
   {role:'userAdminAnyDatabase', db:'admin'} 赋予权限
]
})

如下图:

 

2.5 修改用户密码

在mongodb中,修改用户密码的命令如下:

db.changeUserPassword()如下图:

 

2.6 添加权限

Mongodb给用户追加权限是可以在用户创建的时候追加多种权限以下命令:

db.grantRolesToUser()

用户角色介绍如下:

1. 数据库用户角色:read、readWrite;

2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;

3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;

4. 备份恢复角色:backup、restore;

5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase

6. 超级用户角色:root以上所有用户的权限root用户都有

7. 修改用户密码:修改用户的密码changeUserPassword命令来修改。db.changeUserPassword("reporting", "SOh3TbYhxuLiW8ypJPxmt1oOfL")

第三章  命令行工具

3.1 命令介绍

在mongodb/mongo/bin/有好多的命令,下面主要介绍这些命令的用途:

 

                                                                                                     

Bosndump ----把Bosn文件转换为人类可读的格式包括json

 

Mongpdump---备份数据库的命令备份的格式为bson格式。

Mongorestore---恢复备份数据库的命令。

Mongoexport和mongoimport----导入或者导出josn csv tsv格式的数据,支持多种格式。

Mongosniff-----用于查看发给数据库命令的嗅探工具,通常会把bosn转换为人类可读的shell语句。

Mongostat ------与iostat类似,用来查看每秒的数据操作,以及服务器的连接数。

Mongotop  ----与top类似  这个工具用来轮训mongodb  并且显示它在每个集群里话费的读取和写入数据的时间总数。

Mongoperf----帮助我们了解mongodb实例磁盘操作的情况。

Mongooplog------展示mongodb操作日志里的信息。

Mongos----是用来创建分布式所使用的命令。

3.2 删除数据库

删除数据库的命令如下:

db.dropdatabase()  use到要删除的库,在库下执行此命令,建议删除之前要备份,或者确认是没有文件的库。

3.3 创建数据库

在mongodb中没有创建库,也没有cteate 创建命令,只要use到你要创建的库名称。必须我要新建一个dba库命令如下:

Use dba

然后直接插入数据就OK。

第四章 备份数据库

4.1 备份方式

4.1.1 传统备份

Mongodb的第一种备份方式,是mongodb自带的mongodump命令来备份数据库,使用:

Mongodump –h hostname –uroot –p密码 -d database –o dump。来实现备份,

-h 参数是让我们指定你要备份的是那个主机和IP端口

-d  是指定要备份那个库。如果不指定,则是备份所有的库。

-o 备份的文件放在那。

注意:(这样的备份是没有办法实时备份的,意思就是我们备份期间主库有写的操作在,也是不备份的。如果开启了用户认证,备份的时候需要添加用户名和密码。这个密码必须拥有备份权限。)

恢复数据库的命令为:

Mongorestore –h 127.0.0.1 –uroot –p密码 –o /dump如果mongodb数据库开启了用户认证再恢复的时候也是需要写出用户和密码的,而且必须要有恢复权限,mongodb用户权限。在第三章详细介绍过。

4.1.2 实时备份

想要实时备份必须加上-oplog参数,具体命令如下:

Mongodump –h localhost –oplog /tmp/dump (注意下,本人把备份的文件直接放在tmp目录下,是恢复不回来的,因此在tmp下创建了个dump目录才能恢复回来。)

恢复数据库的命令为:

Mongorestore –h 127.0.0.1 –oplog -o /dump

4.1.3 备份恢复到特定时间段

在上面说到我们可以通过oplog来实时备份,那再想一下mongodb副本集的工作原理,从节点同步主节点来工作,那是不是可以通过这个规则我们回到特定的时间呢?

下面来介绍恢复到特定时间的一种方式,

用mongodump –h hostname –oplog 来备份整个数据库。

用bsondump来查看备份出来的foo.bosn 来查看foo.bosn里面存放了多少数据。

可以用mongorestore –h hostname –oplogReplay –oplogLimit “数据中的timestamp”来恢复到数据特定的时间。

4.1.4 备份数据文件

这种备份方式必须要锁库才能备份,所以建议我们备份从库,把其中的一个从库锁上,不同步数据,再备份,锁库的命令如下:

锁库:db.fsyncLock()

解锁:db.fsyncUnlock()

备份数据文件,恢复比较快捷,备份相对简单。但是不支持这种做法,除非保证一条业务也没有。

 

 

 

第五章 数据回滚

5.1 数据回滚

5.1.1 数据回滚的造成

在主节点接受业务时,还没有写入异地从库时,(为这个业务取一个名称为22。)突然主节点故障宕机,但是22这个数据没还没有同步到异地从库,异地从库接替主节点,继续工作,那22这个数据在从库中是没有的。但是这时候如果原来的主节点排除了故障,需要主节点继续工作,这是就会出现接替不了主的情况。原因为之前的主节点有22这个数据,而异地从库没有22这个数据,只有19.20.21.23。从而会出来节点回滚的情况,两边节点同时回滚到21这个时间点,再同步数据,从而原来的主节点再接替为主节点。

5.1.2 节点回滚时的状态

节点回滚时节点状态为:RECOVERING 只要是这个状态的节点是为正在回滚,回滚成功后会在mongodb指定的data目录下有个rollbback 目录,当中储存着mongodb回滚的数据,我们需要使用mongorestore 命令来导进mongodb库中。

5.1.3 如回滚失败

   一般情况下mongodb主节点承受不了太多数据回滚,如果回滚数据超过300MB,那么可能会回滚超过30分钟,回滚就会失败。对于回滚失败的节点,必须要重新同步。

最好的方式就是保持备份节点的数据尽可能最新。

如若回滚失败只能丢掉那一条数据将原来的主节点上的数据清除,再同步回来新的数据。

5.1.4 预防回滚

预防mongodb数据库回滚的方式,如下:

尽量不要频繁的切换主从。

人为测试双活尽量等切换完成再插入数据。

5.2 注释:

注意:默认情况下从节点是不让读取数据的,我们可以开启这个服务可以使用:SECONDARY>db.getMongo().setSlaveOk();命令开启读取功能。

 

转载于:https://www.cnblogs.com/lsolation/p/10945002.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值