Mongodb日常操作

Mongo安装文档

 

 

安装注意事项:

a、   加从库时首先将从库的信息在主库上增加上去;

b、   一台主,一台从,其中一台做仲裁

c、   权限问题

d、   关闭防火墙

 

1、      配置官方的YUM源,yum后会自动创建mongod用户与组

# vi /etc/yum.repos.d/mongodb3.repo

[mongodb-org-3.0]

name=MongoDB Repository

baseurl=http://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/

gpgcheck=0

enabled=1

----如不行可能需要代理的方式安装


2、建安装MONGO需要的目录及给予相应的权限

A、---MONGO主库目录

#mkdir  -p  /opt/mongodb/data

#mkdir  -p  /opt/mongodb/log

#mkdir  -p  /opt/arb-mongo/log/

#mkdir  -p  /opt/arb-mongo/data/

#vi  /opt/mongo/mykey     (key值可任意取,所有mykey值都一样,mykey文件的权限一定要600权限)

B、---MONGO主库目录权限

#chmod  -R 755 /opt/mongdb

#chown –R mongod:mongod  /opt/mongdb

#chmod  -R 755 /opt/ arb-mongo

#chown –R mongod:mongod  /opt/ arb-mongo

#chmod  600  mongod:mongod  /opt/ arb-mongo/mykey

#chmod  600  mongod:mongod  /opt/mongo/mykey

#chmod  600  mongod:mongod  /opt/mongo/mykey

 


 

附加说明:

--主从数据库的mykey 存放路径/opt/mongodb/mykey,mykey里面的内容可以随意写,mykey文件的权限一定要600权限

[root@server10 mongodb]# cat mykey

7NH6ggmbQwbyCoA/eYkpNFh+Yvxtrn+RrHEoi3agCYThDyoa5qHw40/w/204zMD3

b9f92c+uetwj1a3mUJwoa0/JXnchmIpIEbPPIF6X60gJTMzUE+P9OImAFiil6vtY

0R/RBXm9QxuvHcPV7b5h6VND4A5pq3NCrruY1DXQjF8


3、主从服务器都要配置mongod.conf文件

#cat /etc/mongod.conf—配置文件的存放处

--配置文件内容

storage:

    dbPath: "/opt/mongodb/data"

    journal:

        enabled: true

    directoryPerDB: true

    engine: "wiredTiger"

    wiredTiger:

        engineConfig:

            cacheSizeGB: 30

 

systemLog:

    logAppend: true

    destination: file

    path: "/opt/mongodb/log/mongodb.log"

processManagement:

    pidFilePath: "/opt/mongodb/log/mongo.pid"

    fork: true

net:

    port: 40001

    maxIncomingConnections: 5000

 

security:

    keyFile: "/opt/mongodb/mykey"

    authorization: "enabled"

 

replication:

    replSetName: "gewadb"

oplogSizeMB: 8192

 

4、仲裁的配置与存放处

[root@mongo opt]# cat /opt/arb-mongo/mongod.conf

storage:

    dbPath: "/opt/arb-mongo/data"

    journal:

        enabled: true

    directoryPerDB: true

    engine: "wiredTiger"

    wiredTiger:

        engineConfig:

            cacheSizeGB: 30

 

systemLog:

    logAppend: true

    destination: file

    path: "/opt/arb-mongo/log/arb-mongo.log"

processManagement:

    pidFilePath: "/opt/arb-mongo/log/mongo.pid"

    fork: true

net:

    port: 30001

    maxIncomingConnections: 5000

 

security:

    keyFile: "/opt/arb-mongo/mykey"

    authorization: "enabled"

 

replication:

    replSetName: "gewadb"

    oplogSizeMB: 8192

 

注解:/opt/arb-mongo/mykey里的文件内容与/opt/mongodb/mykey内容一样,mykey文件的权限一定要600权限。

 

5每台MONGO数据库应首先建最高管理员用户与权限admin,最高权限库SQL(前题是注销AUTH认证才可以建)

 


use admin

db.createUser({user:"admin",pwd:"admin",roles: [{ role:"userAdminAnyDatabase", db:"admin" }]})

db.grantRolesToUser("admin",[{ role: "dbAdmin", db: "admin" },{role:"clusterAdmin",db:"admin"}])

 

6、启动方法先后顺序:

A、启动仲裁:

#/usr/bin/mongod -f /opt/arb-mongo/mongod.conf

或service mongod start

 B、启动主从

#/usr/bin/mongod -f /etc/mongod.conf


 

7MONGO加节点注意事项:()

a、从库的所有配置都处理好,启动起来

b、在主库上进入ADMIN用户,最高管理员权限

c、查看有没有节点出来  > rs.status()

d、加节点 > rs.add(“db.40.gewara.com:40001”)

 

 

8、建用户SQL

建库方法:

1、> use abc

switched to db abc

2、>db.createUser({

    user: "abc",

    pwd: "abc",

    roles: [{role: "dbOwner", db: "abc" }]

  }

);

 

3、> db.auth("abc","abc")

1

4、> db.test.insert({a:1})

WriteResult({ "nInserted" : 1 })

5、> show databases

abc    0.000GB

admin  0.000GB

local  0.000GB

9、常用命令:

--使用方法

--数据库信息

db.stat()

rs.status

--数据库最基础的实例运行状态

db.serverStatus

 

--监控

mongostat

mongotop

--mongo建用户

db.createUser({
    user: "wala",
    pwd: "walagewara2015",
    roles: [{role: "dbOwner", db: "wala" }]
  }
);

 

用例:mongodb replica set 添加 删除 节点 2种方法

replica set多服务器主从,添加,删除节点,肯定会经常遇到的。下面详细说明一下,添加,删除节点的2种方法。

一,利用rs.reconfig,来添加,删除节点

1,添加节点

1.    repmore:PRIMARY> config = {_id:"repmore",members:[{_id:0,host:'127.0.0.1:27017',priority :2},{_id:1,host:'127.0.0.1:27018',priority:1}]};   //添加节点    

2.    repmore:PRIMARY> rs.reconfig(config);   //使配置生效    

3.    repmore:PRIMARY> rs.status();     //查看节点状态  

节点添加成功。

注意:新增节点的replSet要和其他节点要一样

2,删除节点

查看复制打印?

1.    repmore:PRIMARY> config = {_id:"repmore",members:[{_id:0,host:'127.0.0.1:27017',priority :2}]};     //删除节点  

2.      

3.    repmore:PRIMARY> rs.reconfig(config);   //使配置生效  

4.      

5.    repmore:PRIMARY> rs.status();   //查看节点状态  

二,利用rs.addrs.remove来添加删除节点

1.    repmore:PRIMARY> rs.add("127.0.0.1:27018");     //添加节点  

2.      

3.    repmore:PRIMARY> rs.remove("127.0.0.1:27018");  //删除节  

注意:利用rs.addrs.remove是不用rs.reconfig来使用配置生效的。

 

--mongo版本升级

---------------------mongo upgrade----------------------------
1、升级所有从
1
)通过 rs.status() 查看哪些从库
2
)在从库上执行:
yum upgrade mongodb-org
service mongod stop
service mongod start

2
、升级主库
1
rs.status() 查看从库的状态是否正确:"stateStr" : "ARBITER"或者"stateStr" : "SECONDARY"。如果是其他状态,要等待
2
rs.stepDown() 做主从切换
3
)按时上面从的方式执行一遍

--MONGO日志切割--------------                      

[root@gewa38 mongodb]# cat mongodb_log.sh

#!/bin/bash

PATH="/opt/mongodb/log"

DATE=`/bin/date -d yesterday +%Y-%m-%d`

cd $PATH

if [ $PATH = `pwd` ]

then

        echo "yes"

        /bin/cat $PATH/mongodb.log >> $PATH/$DATE\.log

        > $PATH/mongodb.log

else

        exit 0

fi

 

 

 

 

常用命令:

--数据库信息

show dbs (库)

show collections(表)

show users(用户)

进入库:

mongo --port 40001 -u wala -p walagewara2015 --authenticationDatabase wala

监控:
    mongostat  --port 40001  -u admin -p GewaAdminPass123  --authenticationDatabase=admin

Mongotop  --port 40001  -u admin -p GewaAdminPass123  --authenticationDatabase=admin

 

2.查看索引

 

1)查看某个库上的所有索引

 

db.system.index.find()

 

2)查看某个表上的所有索引

 

db.collection.getIndexes()

 

3.删除索引

 

1)删除表上的某个索引

 

db.collection.dropIndex({a:1})

 

2)删除表上的所有索引

 

db.collection.dropIndexes()

 

 

4.重建索引

 

db.collection.reIndex()

 

以上操作会删除表上的所有索引(包含_id)并重建所有索引。

 

 

 

--数据库信息

db.stat()

rs.status

--这个函数可以获取到mongodb的服务器统计信息,其中包括 :全局锁,索引,用户操作行为等等这些统计信息,对管理员来说非常重要

db.serverStatus

 

--监控

mongostat

mongotop

 

--数据库信息

show dbs (库)

show collections(表)

show users(用户)

 

--统计表信息

 

db.mpi_aggre_cache_citycode_new.count()

 

 

--删除行信息

 

db.mpi_aggre_cache_citycode_new.remove({"_id":"2015-04-16_110000_mids_240777022"})

 

--删除表

--db.com.gewara.json.mpi.MoviePlaydate.drop()

 

connecting to: test
{
        "host" : "TENCENT64.site", --server的hostname
        "version" : "2.0.5", --mongo版本
        "process" : "mongod", --进程名
        "uptime" : 1238418, --启动时间(单位:S)
        "uptimeEstimate" : 1230730, --基于MongoDB内部粗粒度定时器的运行时间
        "localTime" : ISODate("2012-09-14T09:09:52.657Z"), --server的本地时间
        "globalLock" : {
                "totalTime" : 1238418105923, --全局锁创建的时间(单位:ms 微秒)
                "lockTime" : 75055831911, --全局锁保持的时间(单位:ms 微秒)
                "ratio" : 0.06060621332329477, --lockTime和totalTime的比
                "currentQueue" : {
                        "total" : 0, --等待全局锁的队列中操作数目
                        "readers" : 0, --等待读锁的队列中操作数目
                        "writers" : 0 --等待写锁的队列中操作数目
                },
                "activeClients" : {
                        "total" : 1, --连接到server的当前活动client数目
                        "readers" : 1, --执行读操作的当前活动client数目
                        "writers" : 0 --执行写操作的当前活动client数目
                }
        },
        "mem" : {
                "bits" : 64, --64位机器
                "resident" : 18363, --占用物理内存量。
                "virtual" : 478810, --占用的虚拟内存量
                "supported" : true, --是否支持扩展内存
                "mapped" : 233311, --映射到内存的数据文件大小,很接近于你的所有数据库大小。
                "mappedWithJournal" : 466622,
                "note" : "virtual minus mapped is large. could indicate a memory leak"
        },
        "connections" : {
                "current" : 737, --当前活动连接量。连接到server的当前活跃连接数目
                "available" : 82 --剩余空闲连接量。剩余的可用连接数目
        },
        "extra_info" : {
                "note" : "fields vary by platform",
                "heap_usage_bytes" : 3838448, --此过程中所有的堆字节数目。仅适用于Linux
                "page_faults" : 31058356 --此过程中访问内存中页面失败的总次数。仅适用于Linux
        },
        "indexCounters" : {
                "btree" : {
                        "accesses" : 68229146, --Btree索引的访问次数(索引被访问量)
                        "hits" : 68229146, --内存中的Btree页的数目。(索引命中量)
                        "misses" : 0, --内存中不存在的Btree也数目。(索引偏差量)(索引内存访问失败次数)
                        "resets" : 0, --索引计数器被重置为0的次数
                        "missRatio" : 0 --索引偏差率(未命中率)
                }
        },
        "backgroundFlushing" : {
                "flushes" : 20640, --数据库刷新写到磁盘的次数
                "total_ms" : 2453287, --数据库刷新数据到磁盘花费的微秒数
                "average_ms" : 118.8608042635659, --执行单次刷新花费的平均微秒数
                "last_ms" : 1, --最后一次执行完成刷新数据到磁盘花费的微秒数
                "last_finished" : ISODate("2012-09-14T09:09:35.656Z") --当最后一次刷新数据完成时的时间戳
        },
        "cursors" : {
                "totalOpen" : 0, --server为client保持的游标(cursor)总数
                "clientCursors_size" : 0, --
                "timedOut" : 24 --server启动以来游标(cursor)超时的总数
        },
        "network" : {
                "bytesIn" : NumberLong("1929833164782"), --发送到数据库的数据总量(bytes)
                "bytesOut" : 553137147925, --数据库发出的数据总量(bytes)
                "numRequests" : 2475184328 --发送到数据库的请求量
        },
        "opcounters" : {
                "insert" : 687531883, --server启动以来总的insert数据量
                "query" : 711010343, --server启动以来总的query数据量
                "update" : 0, --server启动以来总的update数据量
                "delete" : 0, --server启动以来总的delete数据量
                "getmore" : 6484, --server启动以来调用任何游标的getMore总次数
                "command" : 1287537 --server启动以来执行其他命令的总次数
        },
        "asserts" : {
                "regular" : 0, --server启动以来抛出正规断言(assert 类似于异常处理的形式)总数目
                "warning" : 1, --server启动以来抛出的告警总数目
                "msg" : 0, --消息断言数目。服务器内部定义的良好字符串错误
                "user" : 4, --用户断言数目。用户产生的错误,譬如:磁盘空间满;重复键。
                "rollovers" : 0 --server启动以来,assert counters have rolled over的次数
        },
        "writeBacksQueued" : false, --是否有从mongos执行的retry操作
        "dur" : {
                "commits" : 30, --上一间隔journal日志发生commit的次数
                "journaledMB" : 0, --上一间隔写到journal日志的数据量(单位:MB)
                "writeToDataFilesMB" : 0, --上一间隔journal日志写到数据文件的数据量(单位:MB)
                "compression" : 0, --
                "commitsInWriteLock" : 0, --写锁期间发生commits的次数
                "earlyCommits" : 0, --schedule时间前请求commit的次数
                "timeMs" : {
                        "dt" : 3064,
                        "prepLogBuffer" : 0, --准备写journal日志花费的时间
                        "writeToJournal" : 0, --写journal日志花费的实际时间
                        "writeToDataFiles" : 0, --journal日志后写数据文件花费的时间
                        "remapPrivateView" : 0 --The amount of time spent remapping copy-on-write memory mapped views
                }
        },
        "ok" : 1 --serverStatus是否返回正确
}

 

 

请使用浏览器的分享功能分享到微信等