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
- https://www.yiibai.com/mongodb/mongodb_ruby.html
- https://github.com/ilivebox/the-little-mongodb-book/blob/master/zh-cn/mongodb.markdown
- https://www.jianshu.com/p/dd7b5a0e2f64
- http://www.jb51.net/article/52498.htm
- http://blog.csdn.net/kturing/article/details/73302014
- https://blog.csdn.net/thatway_wp/article/details/79362261