Mongodb操作

Table of Contents

MacOsX 系统

homebrew
sudo brew install mongodb

sudo brew install mongodb --devel # 安装最新版本

配置 配置文件启动 创建配置目录: 挑一个顺眼的位置,创建一个目录,比如叫/data,用来放置mongo启动需要的三样东西:数据文件、日志文件、配置文件,随便起名,比如用来装数据的叫db、用来装日志的叫log、用来装配置文件的叫conf。 创建好目录以后,在log下创建一个mongo.log文件,用来装日志,conf下创建一个比如叫mongo.conf。log文件由mongodb写入,conf文件的内容需要自己写好,mongodb启动的时候读取。

mongo.conf #数据库路径 dbpath=/data/db/

#日志输出文件路径 logpath=/data/log/mongo.log

#错误日志采用追加模式,配置这个选项后mongodb的日志会追加到现有的日志文件,而不是从新创建一个新文件 logappend=true

#启用日志文件,默认启用 journal=true

#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false quiet=false

#是否后台启动,有这个参数,就可以实现后台运行 fork=true

#端口号 默认为27017 port=27017

#指定存储引擎(默认不需要指定) #storageEngine=mmapv1

#开启网页日志监控,有这个参数就可以在浏览器上用28017查看监控界面 httpinterface=true 启动 mongod -f /data/conf/mongo.conf

停止 安全停止MongoDB进程 向MongoDB进程发送信号用于停止MongoDB,假设要安全停止能够有两种信号:sigint 信号,或者 sigterm信号

怎样停止: $ kill -2 8888

当中 8888 为mongod进程号 ,该进程号能够通过 ps -axu |grep mongo 获取。-2表示向mongod进程发送sigint信号

$ kill -4 8888

当中 8888 为mongod进程号 ,该进程号能够通过 ps -axu |grep mongo 获取;-4 表示向mongod进程发送sigterm信号

上面2种方式怎样做到停止安全 mongod进程收到sigint信号或者sigterm信号,会做一些处理: - 关闭全部打开的连接; - 将内存数据强制刷新到磁盘; - 当前的操作运行完成。 -安全停止

使用mongod命令shutdown的安全停止 > use admin; –使用管理员数据库 > db.shutdownServer(); 不安全的停止方式有: $ kill -9 8888

当中 8888 为mongod进程号 。该进程号能够通过 ps -axu |grep mongo 获取。-9 表示向mongod进程发送sigkill信号,MongoDB直接停止,不会做一些相关处理。

数据库直接关闭。 数据丢失; 数据文件损坏; 修复数据库(成本高,有风险) 通过上面的分析可以看出,MongoDB的启动过程和其它数据库类似。主要是校验数据库文件的一致性。一般不会有太多风险,仅仅要数据库可以正常启动就可以;对于MongoDB的停止。能够通过mongo工具中的shutdown命令安全停止,也能够在查询到MongoDB进程号后,使用kill -2,kill -4 两种方式实现同样的安全停止方式;假设对MongoDB使用kill -9的方式。则是不安全的停止方式。有可能造成各种问题。而安全停止和不安全停止的差别在于:安全停止在发出停止命令后,数据库在后台会进行一系列的操作来保证数据库终于是一致性关闭。但假设是不安全停止,则数据库进程直接没有,数据库不会再后台做一系列的操作保证一致性关闭,下次启动时。就有可能发生各种问题。

查看启动日志 tail -f /data/log/mongo.log

CenterOs 系统

第一种方式(yum安装)

yum 安装

配置yum源

vim /etc/yum.repos.d/mongodb-org-3.6.repo

添加以下内容

[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
yum
yum install -y mongodb-org

编辑默认配置文件 mongod.conf

vim /etc/mongod.conf

数据存放位置

storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# 网络相关配置
net:
  port: 27017    # 默认端口
  bindIp: 0.0.0.0  # 监听IP配置,开启远程连接可以注释本行或者修改IP为0.0.0.0

# 是否开启权限验证,默认注释,即不开启
security:
  authorization: enabled

命令

systemctl start mongod.service

systemctl stop mongod.service

systemctl restart mongod.service

第二种方式(编译安装)

***编译安装

curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz    # 下载
tar -zxvf mongodb-linux-x86_64-3.0.6.tgz                                   # 解压
mv  mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb                         # 将解压包拷贝到指定目录
echo "export PATH=/usr/local/mongodb/mongodb-linux-x86_64-3.0.6/bin:$PATH" /root/.bashrc    # 添加到PATH 路径中
source /root/.bashrc
#创建数据库目录
mkdir -p /data/db

说明:

MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以你需要手动创建data目录,并在data目录中创建db目录。 以下实例中我们将data目录创建于根目录下(/)。 注意:/data/db 是 MongoDB 默认的启动的数据库路径(–dbpath)。

启动/停止

sudo mongod #控制台启动

sudo mongod -fork -dbpath=/data/db -logpath=/usr/local/var/mongodb/mongo.log -logappend #后台启动

mongostat #查看mongo状态

mongo #进入shell

安全停止mongodb:

1.进入mongo shell:mongo > use admin > db.shutdownServer() 启动找不到LC_CTYPE

vim /etc/locale.conf

添加 LC_CTYPE=en_US.utf8

mongodb 两种备份和还原的方法

mongodump -h IP –port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径

  • mongorestore -h IP –port 端口 -u 用户名 -p 密码 -d 数据库 –drop 文件存在路径

eg: - mongodump -h s02 -d csappwebprod -o /home/ec2-user/itgo - mongorestore -d csappwebprod –drop /home/ec2-user/itgo/mongobak/csappweb_prod

如果没有用户,可以去掉-u和-p。

如果导出本机的数据库,可以去掉-h。

如果是默认端口,可以去掉–port。

如果想导出所有数据库,可以去掉-d。

–drop的意思是,先删除所有的记录,然后恢复。

克隆复制

db.copyDatabase(fromdb, todb, fromhost, username, password, mechanism)

eg: - db.copyDatabase("cpyk","cpyk2","localhost"); - db.copyDatabase("csappwebprod","cp_yk","s02");

  • copyDatabase 源服务器也可能是 slave/secondary。
  • copyDatabase 不是原子性的操作: 如果在复制的过程中,源服务器数据库修改了,

目标服务器接收的document和更新的源服务器会有所不同。这个命令必须运行于目标服务器。这个命令不会给源服务器或者目标服务器加锁。两个服务器都允许进行读写操作。

mongoldb 操作

添加一个字段. url 代表表名 , 添加字段 content。 字符串类型。

db.url.update({}, {$set: {content:""}}, {multi: 1})

删除一个字段

db.url.update({},{$unset:{'content':''}},false, true)

导出csv 或 json

例: mongoexport -d mby_invs20_development -c users -f _id,login_name,user_name,password,area_ids,region_ids,role_id,dealer_id –type=csv -o /home/mby-user/yk/users.csv

mongoexport -d dms_production -c series -f _id,created_at,name,brand_id,updated_at –type=json -o /home/ec2-user/ykyk/series.json

mongoexport -h n01 -u admin -p 8022523 –authenticationDatabase admin -d dms_production -c bg_jobs -f _id,status,prior,http_method,url,body,no,user_id,created_at –type=json -o /home/ec2-user/itgo/bg_jobs1.json

mongoimport -d runoob -c bg_jobs –type json –file /home/ec2-user/itgo/bg_jobs1.json

-d 标示 数据库 -c 标示 数据表 -f 需要提取的field用逗号分隔 -o 输出路径

  • 导入 csv 或 json

mongoimport -d my_mongodb -c user –type csv –headerline –file user_csv.dat

mongoimport -d cp_yk -c series –type json –file /home/ec2-user/ykyk/series.json


  • update 参数
  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如$,$inc…)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别

  • 更改key的name:$rename.
  • 例:

db.getCollection('goodses_copy').update({},{$rename:{"price222":"price"}},false,true)

  • 批量更新

db.getCollection('invoices').update({ "userid" : 47} , { $set : { "areaid" : NumberInt(13)} },false,true );

ruby 操作mongodb

Date: 2022-06-11 Sat 21:35

Author: yangk

Created: 2023-01-03 Tue 12:43

hello-world