• mongodb的mongod.lock文件及oplog文件


       在mongodb的启动时,在数据目录下,会生成一个mongod.lock文件。如果在正常退出时,会清除这个mongod.lock文件,若要是异常退出,在下次启动的时候,会禁止启动,从而保留一份干净的一份副本数据。有人可能会想到删除这个文件,

    建议请不要这么做。如果这么做,我们也不知道数据文件是否会损坏,如果mongod.lock文件阻止mongod的启动,请对数据文件进行修复,而不是简单的删除该文件。而这里的mongod.lock文件存放的是:启动mongod的进程号.

    这里提到了"正常退出",详细介绍如下:

    MongoDB 提供几种关闭服务的命令,具体为以下:


    一 使用 Crtl+C 关闭

     [mongo@redhatB data]$ mongod --dbpath=/database/mongodb/data/ --logpath=/var/applog/mongo_log/mongo.log --logappend --port=27017 --journal > start_mongo.log 2>&1
    光标:键入 Crtl+C 关闭

        备注:如果以前台方式启动 MongoDB 服务,使用“Crtl+C” 服务会关闭,这种关闭方式会等待
                  当前进行中的的操作完成,所以依然是干净的关闭方式。

    二 使用数据库命令关闭
    --2.1 开启服务

     [mongo@redhatB data]$ mongod -f /database/mongodb/data/mongodb_27017.conf
    forked process: 18155
    all output going to: /var/applog/mongo_log/mongo.log
    child process started successfully, parent exiting

       
    --2.2 登陆数据库

     [mongo@redhatB data]$ mongo
    MongoDB shell version: 2.2.1
    connecting to: test

       

    --2.3 关闭 MongoDB 服务

     > use admin;
    switched to db admin

    db.shutdownServer();
    Wed Nov 14 06:07:33 DBClientCursor::init call() failed
    Wed Nov 14 06:07:33 query failed : admin.$cmd { shutdown: 1.0 } to: 127.0.0.1:27017
    server should be down...
    Wed Nov 14 06:07:33 trying reconnect to 127.0.0.1:27017
    Wed Nov 14 06:07:33 reconnect 127.0.0.1:27017 failed couldnt connect to server 127.0.0.1:27017

    三 使用 mongod 命令关闭

     [mongo@redhatB data]$ mongod  --shutdown  --dbpath /database/mongodb/data/
    killing process with pid: 17747

         备注:mongod 命令的 shutdown 选项能干净的关闭 MongoDB 服务。
      

    四 使用 kill 命令
    --4.1 查看 mongo 相关进程

     [mongo@redhatB data]$ ps -ef | grep mongo
    root     17573 14213  0 05:10 pts/1    00:00:00 su - mongo
    mongo    17574 17573  0 05:10 pts/1    00:00:00 -bash
    mongo    18288     1  0 06:12 ?        00:00:00 mongod -f /database/mongodb/data/mongodb_27017.conf
    mongo    18300 17574  6 06:13 pts/1    00:00:00 ps -ef
    mongo    18301 17574  0 06:13 pts/1    00:00:00 grep mongo

       
    --4.2 kill mongo 服务进程

     [mongo@redhatB data]$ kill 18288

    [mongo@redhatB data]$ ps -ef | grep pmon
    mongo    18304 17574  0 06:13 pts/1    00:00:00 grep pmon

      备注:可以使用操作系统的 kill 命令,给 mongod 进程发送 SIGINT 或 SIGTERM 信号,
                 即 "kill -2 PID," 或者 “kill -15 PID“。
          
                建议不要使用 ”kill -9 pid“,因为如果 MongoDB 运行在没开启日志(--journal)的情况下,
                可能会造成数据损失。

      在mongo库中,oplog是数据存放和数据主从同步的,而在本地库local中,$ show collections 下,有个oplog.rs 的collection,解释下其中的字段:


         { ts : ..., op: ..., ns: ..., o: ... o2: ...  }

        上面就是一条oplog信息,复制机制就是通过这些信息来进行节点间的数据同步并维护数据一致性的,其中:
       
        ts:8字节的时间戳,由4字节unix timestamp + 4字节自增计数表示。
            这个值很重要,在选举(如master宕机时)新primary时,会选择ts最大的那个secondary作为新primary。
        op:1字节的操作类型,例如i表示insert,d表示delete。
        ns:操作所在的namespace。
        o:操作所对应的document,即当前操作的内容(比如更新操作时要更新的的字段和值)
        o2: 在执行更新操作时的where条件,仅限于update时才有该属性

        
        其中op,可以是如下几种情形之一:

         "i": insert
         "u": update
         "d": delete
         "c": db cmd
         "db":声明当前数据库 (其中ns 被设置成为=>数据库名称+ '.')
         "n":  no op,即空操作,其会定期执行以确保时效性 
  • 相关阅读:
    MySQL Connector Net 6.6.5 Entity Framework 显式预加载 Eager Load Bug
    MySQL 5.6 Replication 复制 FAQ
    MySQL 实现 EF Code First TimeStamp/RowVersion 并发控制
    Linux 系统命令备忘
    MySQL 自增列插入0值的方法
    【转载】将数据存储到SmartObject中
    【转载】使用C#代码发起K2 Blackpearl流程
    【转载】WorkFlow、BPM、SOA
    百度统计喻友平:谈如何更好的优化网站质量
    【转载】浅识K2 blackpearl中SmartObject
  • 原文地址:https://www.cnblogs.com/unqiang/p/4113161.html
Copyright © 2020-2023  润新知