Linux CentOS 6.5 yum安装MongoDB的操作

安装mongodb-3.6.4版本

执行命令

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.6.4.tgz

如果出现错误,则在root下更新wget,执行

yum upgrade wget

再去执行以上wget命令即可。

下载完成后,进行解压

tar -zxvf mongodb-linux-x86_64-rhel62-3.6.4.tgz

如果嫌解压后文件名称过长,可以进行重命名

mv mongodb-linux-x86_64-rhel62-3.6.4 mongodb

进入到mongodb目录下

cd mongodb

创建db和日志目录

mkdir data
mkdir -p data/db
mkdir -p data/logs

在logs目录下创建mongodb.log文件

touch mongodb.log

在data目录下创建mongodb.conf文件

cd mongodb/data
vi mongodb.conf
port=8087

dbpath=/opt/mongodb/mongodb/data/db

logpath=/opt/mongodb/mongodb/data/logs/mongodb.log

fork=true

logappend=true

启动

在mongodb目录下执行

./bin/mongod --config /opt/mongodb/mongodb/data/mongodb.conf

可以看到以下内容:

未分类

进入到mongodb进行操作

./bin/mongo

无法连接 127.0.01:27017,经过分析,是防火墙端口没有开放。

未分类

可以看到有很多警告信息,没有关系,因为接下来要创建用户,mongodb默认情况下没有用户,需要创建,授权。

> use admin
switched to db admin
> db.system.users.find();

没有任何输出,这时则创建用户,我创建的是一个超级用户

db.createUser(
... {
... user:"root",
... pwd:"554466",
... roles:[{role:"root",db:"admin"}]
... }
... )
Successfully added user: {
    "user" : "root",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ]

}

然后关闭mongodb,执行命令db.shutdownServer();

exit;退出mongodb客户端,重新编辑配置文件vi data/mongodb.conf

加入一行auth=true,保存退出,再次启动mongodb,此时就不会出现警告信息,进入客户端,进行用户验证。

未分类

服务器部署前端&node 项目(包括阿里云服务器、nginx 以及 mongoDB 的配置)

服务器购买&配置

  1. 打开阿里云,选择购买云服务器 ECS,这里可以选择一键购买进行快速配置,操作系统选择 CentOS 7.2 64 位,其他默认或根据实际需求来,若选择自定义购买请自行搜索;
  2. 购买成功设置账号密码后,就可以通过 ftp 工具(我用的是 FileZilla)或者 git 连接我们的服务器了,这个时候我们也可以打开阿里云的控制台/云服务器 ECS 查看购买的服务器;
  3. 打开阿里云的控制台/云服务器 ECS/网络和安全/安全组,在安全组列表点击配置规则,点击快速创建规则,就可以暴露端口了。比如暴露 80 端口,选择 HTTP(80),授权对象填0.0.0.0/0,其他默认就可以了。暴露其他端口你就在自定义端口选择,比如暴露 7001 端口,你就在自定义端口选择 TCP,输入7001/7001即可。
  4. 开启node 性能平台,点击创建新应用按照操作提示来就行,成功开启后在项目配置(具体配置看下文))就可以监控数据了。

连接服务器

1.git 连接

# ssh remote_username[@remote_ip](/user/remote_ip) 然后输入密码即可

如果ssh不存在,执行以下命令即可
# yum install openssh-client 下载客户端ssh

2.ftp 工具连接(这里以 FileZilla 为例),下载 filezilla 后,点击新建站点,输入主机 ip,选择 sftp 协议,选择登录类型为正常,输入账号密码即可

部署 node 环境

1.部署 node 环境

# ssh remote_username[@remote_ip](/user/remote_ip) 连接服务器
# wget https://nodejs.org/dist/v6.9.5/node-v6.9.5-linux-x64.tar.xz 下载node压缩文件
# tar xvf node-v6.9.5-linux-x64.tar.xz 解压
# ln -s /root/node-v6.9.5-linux-x64/bin/node /usr/local/bin/node 创建软连接
# ln -s /root/node-v6.9.5-linux-x64/bin/npm /usr/local/bin/npm 创建软连接
# node -v 查看node版本
# npm -v 查看npm版本

2.其他

# yum install vim 下载vim

nginx 安装&配置

1.nginx 安装

# yum install epel-release 下载epel-release
# yun install nginx 下载nginx
# cd /etc/nginx
# vim nginx.conf 用vim打开nginx.conf

2.修改 nginx.conf

  • 修改 user 为 root
  • 修改 server 如下,这里 admin 是指向管理后台项目,app 是指向移动端项目,wx 是指向代理另一个 node 微信公众号项目(运行在 7002 端口,但微信公众号配置 http 只允许 80 端口,所以设置代理,我们的 elm 接口运行在 7001 不用代理)
server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  _;
    root         /root/www/;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location /admin/ {
    # 为空即可,前端打包文件放在/root/www/admin里面就可访问到,注意默认是index.html
    }

    location /app/ {

    }

    location /wx/ {
        proxy_pass   http://127.0.0.1:7002/;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

3.启动 nginx

nginx -t 测试nginx语法是否有误
nginx 启动nginx
nginx -s reload 重启nginx,修改nginx.conf后记得重启

4.其他命令

ps -ef | grep nginx 显示nginx进程
nginx -s stop 停止nginx
nginx -v 查看nginx版本

部署 mongodb

1.安装 mongodb

# ssh remote_username[@remote_ip](/user/remote_ip) 连接服务器
# 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 解压
# mkdir data 创建数据库文件夹
# touch mongodb.log 创建日志文件
# cd /usr/local/mongodb/bin
# ./mongod -dbpath=/usr/local/mongodb/data -logpath=/usr/local/mongodb/mongodb.log -logappend -port=27017 -fork 注意fork是后台启动,避免又要再开窗口重新连接服务器再能进行其他操作
# ./mongo 连接mongodb

2.配置随 linux 启动

在/etc/rc.local 添加如下即可:

# rm /usr/local/mongodb/data/mongod.lock 停止可能在运行的mongo
# /.../bin/mongod -dbpath /usr/local/mongodb/data -logpath /usr/local/mongodb/mongodb.log -logappend -fork -port 27017

3.设置权限

# cd /usr/local/mongodb/bin
# ./mongod -dbpath=/usr/local/mongodb/data -logpath=/usr/local/mongodb/mongodb.log -logappend -port=27017 -fork
# ./mongo
> use admin
> db.createUser(
>  {
>    user: "root",
>    pwd: "123456",
>    roles: [ { role: "root", db: "admin" } ]
> }
> )
> db.shutdownServer();
# ./mongod -dbpath=/usr/local/mongodb/data -logpath=/usr/local/mongodb/mongodb.log -logappend -port=27017 -fork --auth
# db.auth("root","123456")

4.项目中连接 mongodb(这里以 koa 框架 egg 项目为例,其他 node 请自行查找)

# cnpm i egg-mongoose -S

// config/plugin.js
exports.mongoose = {
  enable: true,
  package: 'egg-mongoose',
}

// config/config.default.js
config.mongoose = {
    url: 'mongodb://127.0.0.1/eggadmin',
    options: {
        // 如果设置了密码
        // auth: { "authSource": "admin" },
        // user: "root",
        // pass: "123456",
    }
}

部署 node 项目

部署环境 阿里云 CentOS 7.2 64 位

1.本地项目根目录(删除 node_modules,建议依赖在服务器下载)

# tar -zcvf ../file_name.tgz . 打包
# scp ../file_name.tgz remote_username[@remote_ip](/user/remote_ip):/root/www/server 上传到服务器

2.服务器

# ssh remote_username[@remote_ip](/user/remote_ip) 连接服务器
# cd /root/www
# mkdir server 这里创建server文件夹放node项目代码
# cd server
# tar -zxvf file_name.tgz . 解压
# cnpm install --production 安装生产环境依赖

1. koa项目(express项目类似)
# cnpm i -g pm2 下载pm2
# pm2 start bin/www 守护进程启动
# pm2 restart app_name|app_id 重启
# pm2 stop app_name|app_id 停止
# pm2 list 查看进程状态
# pm2 stop all 停止所有应用
# pm2 start ./bin/www --watch 监听更改自动重启

2. egg项目
# npm start 运行
# npm stop 停止

3.阿里 node 性能平台监控

1)koa 项目(express 项目类似)

# wget -O- https://raw.githubusercontent.com/aliyun-node/tnvm/master/install.sh | bash 安装版本管理工具 tnvm
# source ~/.bashrc
# tnvm ls-remote alinode 查看需要的版本
# tnvm install alinode-v3.11.4 安装需要的版本
# tnvm use alinode-v3.11. 使用需要的版本

新建 config.json 文件如下,从node 性能平台获取对应的接入参数

{
 "appid": "<YOUR APPID>",
 "secret": "<YOUR SECRET>"
 }
# cnpm install [@alicloud](/user/alicloud)/agenthub -g 安装 agenthub
# agenthub start config.json 启动agenthub
# agenthub list 查看 agenthub 列表
# ENABLE_NODE_LOG=YES pm2 start bin/www 使用pm2管理的应用

2)egg 项目

# cnpm i nodeinstall -g
# nodeinstall --install-alinode ^3
# cnpm i egg-alinode --save
# npm start
// config/plugin.js
exports.alinode = {
  enable: true,
  package: 'egg-alinode',
};

// config/config.default.js
config.alinode = {
  appid: '<YOUR_APPID>',
  secret: '<YOUR_SECRET>',
};

部署前端项目(这里以 vue 为例)

在项目根目录npm run build,然后把 dist 文件夹里的内容传到服务器,这里我们把两个项目分部传到/root/www/app 和/root/www/admin,记得提前创建 app 和 admin 文件夹

zanePerfor前端性能监控平台高可用之Mongodb副本集读写分离架构

优势:

MongoDB 副本集(Replica Set)是有自动故障恢复功能的主从集群,有一个Primary节点和一个或多个Secondary节点组成。

当主节点挂掉之后,会由多个副本节点选举产生出新的主节点。(节点数请保持为基数个)。

这样就能保证应用的高可用,其中一个或多个节点挂掉之后还能正常运行和服务。

劣势:

数据丢失:主节点挂掉之后,副本节点选举出新的主节点需要一定的时间,这段时间会造成数据的丢失。

不能承受高吞吐量:副本集架构追根还是单机执行写任务,在高并发应用中性能受限,不能解决流量洪峰时的实时读写。

不能完全保证项目的高可用:在副本集的环境中,要是所有的Secondary都宕机了,只剩下Primary。最后Primary会变成Secondary,将不能再提供服务。

总结:

在大多数情况下推荐使用副本集架构,副本集架构在保证高可用的同时还能降低服务器成本,相对于集群分片来说配置也更简单,更易于维护,具体选择什么架构需要根据自己的项目来决定。

Mongodb副本集架构搭建:

Mongodb副本集搭建比较简单,你只需要根据下面的步骤一步一步操作即可(以下内容以Linux或mac为例进行环境搭建)。

一:安装Mongodb (略)

请参考: LINUX系统下安装mongodb(https://blog.seosiwei.com/detail/40)

关于副本集搭建还可参考我的另一篇文章: MongoDB主从副本集架构(https://blog.seosiwei.com/detail/39)

二:副本集搭建

(备注:鉴于成本,以下内容在单机下部署为例,多机部署只需要替换下IP即可)

1、创建数据和日志存放目录

// 数据存放目录
mkdir -p /data/replication/s0
mkdir -p /data/replication/s1
mkdir -p /data/replication/s2
// 日志存放目录
mkdir -p /data/replication/log

2、启动Mongodb服务

(下面以28100,28101,28100三个端口为例)

// 启动mongodb服务
mongod --dbpath /data/replication/s0 --logpath /data/replication/log/s0.log --fork --smallfiles --port 28100 --replSet rs1
mongod --dbpath /data/replication/s1 --logpath /data/replication/log/s1.log --fork --smallfiles --port 28101 --replSet rs1
mongod --dbpath /data/replication/s2 --logpath /data/replication/log/s2.log --fork --smallfiles --port 28102 --replSet rs1
  • --dbpath:存放数据目录

  • --logpath:存放日志目录

  • --smallfiles:是否使用较小的默认文件。默认为false,不使用。

  • --replSet: 副本集名称,副本集名称必须一致

进入28100服务设置副本集

// 登录 mongodb
mongo localhost:28100

// 切换到admin用户
use admin

// 初始化副本集
rs.initiate({_id:"rs1",members:[{_id:0,host:"127.0.0.1:28100"},{_id:1,host:"127.0.0.1:28101"},{_id:2,host:"127.0.0.1:28102"}]})

// 查看副本集状态
rs.status()

副本集设置成功之后,查看状态会看到如下信息即标识成功。

{
    "set" : "rs1",
    "date" : ISODate("2018-11-14T08:40:44.659Z"),
    "myState" : 1,
    "term" : NumberLong(2),
    "heartbeatIntervalMillis" : NumberLong(2000),
    "optimes" : {
        "lastCommittedOpTime" : {
            "ts" : Timestamp(1542184835, 1),
            "t" : NumberLong(2)
        },
        "readConcernMajorityOpTime" : {
            "ts" : Timestamp(1542184835, 1),
            "t" : NumberLong(2)
        },
        "appliedOpTime" : {
            "ts" : Timestamp(1542184835, 1),
            "t" : NumberLong(2)
        },
        "durableOpTime" : {
            "ts" : Timestamp(1542184835, 1),
            "t" : NumberLong(2)
        }
    },
    "members" : [
        {
            "_id" : 0,
            "name" : "127.0.0.1:28100",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 5977,
            "optime" : {
                "ts" : Timestamp(1542184835, 1),
                "t" : NumberLong(2)
            },
            "optimeDate" : ISODate("2018-11-14T08:40:35Z"),
            "electionTime" : Timestamp(1542178880, 1),
            "electionDate" : ISODate("2018-11-14T07:01:20Z"),
            "configVersion" : 1,
            "self" : true
        },
        {
            "_id" : 1,
            "name" : "127.0.0.1:28101",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 5970,
            "optime" : {
                "ts" : Timestamp(1542184835, 1),
                "t" : NumberLong(2)
            },
            "optimeDurable" : {
                "ts" : Timestamp(1542184835, 1),
                "t" : NumberLong(2)
            },
            "optimeDate" : ISODate("2018-11-14T08:40:35Z"),
            "optimeDurableDate" : ISODate("2018-11-14T08:40:35Z"),
            "lastHeartbeat" : ISODate("2018-11-14T08:40:43.345Z"),
            "lastHeartbeatRecv" : ISODate("2018-11-14T08:40:43.603Z"),
            "pingMs" : NumberLong(0),
            "syncingTo" : "127.0.0.1:28102",
            "configVersion" : 1
        },
        {
            "_id" : 2,
            "name" : "127.0.0.1:28102",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 5970,
            "optime" : {
                "ts" : Timestamp(1542184835, 1),
                "t" : NumberLong(2)
            },
            "optimeDurable" : {
                "ts" : Timestamp(1542184835, 1),
                "t" : NumberLong(2)
            },
            "optimeDate" : ISODate("2018-11-14T08:40:35Z"),
            "optimeDurableDate" : ISODate("2018-11-14T08:40:35Z"),
            "lastHeartbeat" : ISODate("2018-11-14T08:40:43.345Z"),
            "lastHeartbeatRecv" : ISODate("2018-11-14T08:40:43.575Z"),
            "pingMs" : NumberLong(0),
            "syncingTo" : "127.0.0.1:28100",
            "configVersion" : 1
        }
    ],
    "ok" : 1,
    "operationTime" : Timestamp(1542184835, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1542184835, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}

3、设置Mongodb副本可读

在mac和linux系统中,一般在~目录下会有个.mongorc.js文件,给此文件新增一句rs.slaveOk();即可。

​查看是否有此文件:

cd ~
ll -a

若无,则全局查找:

// 全局搜索
sudo find / -name .mongorc.js

添加rs.slaveOk();

vi ~/.mongorc.js

// 此文件默认为空
// 增加一行,保存退出
rs.slaveOk();

重启Mongodb,这时所有副本节点都可读。

在zanePerfor (前端性能监控平台)生产环境中使用,并做读写分离。

找到项目的 config/config.prod.js文件

更改如下Mongodb配置即可:

// mongodb 服务
// 此处替换 url 参数为链接副本集方式即可
const dbclients = {
        db3: {
           url: 'mongodb://127.0.0.1:28100,127.0.0.1:28101,127.0.0.1:28102/performance?replicaSet=rs1',
            options: {
                poolSize: 100,
                keepAlive: 10000,
                connectTimeoutMS: 10000,
                autoReconnect: true,
                reconnectTries: 100,
                reconnectInterval: 1000,
            },
        },
 };

读写分离:

项目所有查询已经做好了读写分离操作,例如查询page页列表,其他皆如此即可,这样就保证了服务的读写压力(主节点负责写数据,副本节点负责读取数据)。

未分类

read参数说明

primary - (默认值)    只从主节点读取。如果主节点不可用则报错。不能跟 tags 选项组合使用。
secondary            只有当从节点可用时,从中读取,否则报错。
primaryPreferred     优先读取主节点,不可用时读取从节点。
secondaryPreferred   优先读取从节点,不可用时读取主节点。
nearest              所有操作都读最近的候选节点,不同于其他模式,该选项会随机选取所有主、从节点。

选项别名:

p   primary
pp  primaryPreferred
s   secondary
sp  secondaryPreferred
n   nearest

zanePerfor下一步篇:

https://blog.seosiwei.com/detail/43

zanePerfor github地址:

https://github.com/wangweianger/zanePerfor

zanePerfor 开发文档:

https://blog.seosiwei.com/performance/index.html

Mac安装mongodb

在Mac上安装首选使用brew进行安装

Brew是Mac上的套件管理器,类似于Linux系统中的yum或者apt-get,在安装软件的时候可以摆脱下载软件包再手动安装的繁琐操作,让安装软件变得更加的简单。

Homebrew

homebrew是Mac下的软件包管理工具,主要是填补brew缺失的软件包。提供安装软件,卸载软件等操作。

首先安装Homebrew:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

如果想要卸载brew,不知道卸载命令,可以再一次执行brew的安装命令,如果已经安装brew再次执行安装命令的话,会提示,告诉已经安装过brew了,如果想重复安装就执行卸载命令,然后根据终端的提示执行卸载命令就可以了。

brew的常用命令

1.更新brew

brew update

2.安装软件

brew install soft_name
// soft_name为所要安装的软件名

3.卸载软件

brew uninstall soft_name

4.显示使用brew安装的软件列表

brew list

5.更新软件

brew upgrade // 更新所有使用brew安装的软件
brew upgrade soft_name // 更新soft_name

6.查看哪些软件需要更新

brew outdated

7.查找软件

// 当记不清软件的名字的时候,可以使用search,只需要写出几个字母,就可以联想所有的结果并且输出
brew search

8.查找使用brew安装的东西,安装在哪里

brew --cache

安装mongodb

因为已经安装了brew,所以通过brew安装mongodb:

brew install mongodb

安装成功

未分类

输入mongo启动,会发现并没有成功

未分类

这是因为没有创建mongo的默认数据写入目录,需要自己手动创建

创建默认数据写入目录

注:默认目录为根目录下的data/db

mkdir -p /data/db

然后给刚刚创建的目录赋予可读写的权限

chown `id -u` /data/db

注:如果不使用命令行修改权限,可以前往/data文件夹右键点击显示简介,选择最下面的共享与权限,把所有权限改成读与写

如果不想使用mongo的默认目录,可以自己更改,使用–dbpath参数

mongo --dbpath dir_name

现在可以放心的启动mongodb了

mongod

然后再开启一个新的终端,执行

mongo

要先执行mongod再执行mongo,出现箭头表示链接成功

未分类

数据库错误

如果数据库启动不了,可能是由于未正常关闭导致的,可以删除/data/db文件夹中的mongod.lock文件,然后重新启动,如果还不可以,可以查杀一下进程:

ps -aef | grep mongo

然后根据进程ID杀掉进程,最后重启mongodb

MongoDB常用命令

1.查询库、查询表

show dbs  //查询所有的数据库

show collections   //查询当前数据库下的所有数据表123

2.建库和删库

use myDbs  //建立一个名为myDbs的数据库,当这个库存在时则是切换到这个数据库中去

use myDbs

db.dropDatabase();  //这两句是删除这个数据库12345

3.建表和删表

//表操作都是要先到一个数据库中去,通过use方法
db.myTable.insert({name:’hf’,age:20});  //在mongodb中在插入数据时即创建了改表,此时创建的是名为myTable的数据表
db.myTable.drop();  //删除myTable这个数据表
//如果没有指定数据库,表会创建在mongdb默认数据库test里1234

4.单表的增删改

db.myTable.insert({name:’hahaha’,age:12});  //新增

db.myTable.update({name:’hf’},{$set:{age:25}})  //修改

db.myTable.remove({name:’hf'});  //删除12345

5.查询

db.myTable.find();  //查询myTable中的所有数据

db.myTable.find().sort({age:1})  //根据age升续

db.myTable.find().count();  //查询

MongoDB数据的导出、导入、备份、恢复

mongodb数据库是一种非关系性的数据库,在日常的工作中用到的也是很多的,接下来介绍一下mongodb数据的导出、导入、备份、恢复,掌握这些技能避免数据丢失

使用的工具主要有

  • mongoexport数据导出
  • mongoimport数据导入
  • mongodump数据备份
  • mongorestore数据恢复

mongoexport是数据导出工具

用法:

mongodbexport -d 数据库名 -c 数据表名 -o 导出文件名 --type json/csv -f "字段名"

参数:

-d :数据库名
-c :collection名
-o :输出的文件名
--type : 输出的格式,默认为json
-f :输出的字段,如果-type为csv,则需要加上-f "字段名"

示例:

mongoexport.exe -d test -c runoob -o d:datadata.json --type json -f "title"

mongoimport是数据导入工具

用法:

mongoimport -d 数据库名 -c 数据表名 --file 文件名 --headerline --type json/csv -f "字段"

参数:

-d :数据库名
-c :collection名
--type :导入的格式默认json
-f :导入的字段名
--headerline :如果导入的格式是csv,则可以使用第一行的标题作为导入的字段
--file :要导入的文件

示例:

mongoimport.exe -d test -c runoob --file d:datadata.json --type json

mongodump是数据备份工具

用法:

mongodump -h dbhost -d dbname -o dbdirectory

参数:

-h: MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
-d: 需要备份的数据库实例,例如:test
-o: 备份的数据存放位置,例如:/home/mongodump/,当然该目录需要提前建立,这个目录里面存放该数据库实例的备份数据。

示例:

mongodump -h dbhost -d dbname -o dbdirectory

mongorestore是数据恢复工具

用法:

mongorestore -h dbhost -d dbname --dir dbdirectory

参数:

-h: MongoDB所在服务器地址
-d: 需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
--dir: 备份数据所在位置,例如:/home/mongodump/itcast/
--drop: 恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用!

示例:

mongorestore -h 192.168.17.129:27017 -d itcast_restore --dir /home/mongodump/itcast/

MongoDB 账号密码登录

配置MongoDB 账号密码登录的步骤如下 (假设有 2 个数据库 admin (自带的) 和 foo):

1、启动 MongoDB: mongod --config /usr/local/etc/mongod.conf

2、进入数据库 admin: use admin

3、创建用户 admin:

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

4、进入数据库 foo: use foo

5、创建用户 bar:

db.createUser(
  {
    user: "bar",
    pwd: "bar",
    roles: [
        { role: "dbAdmin", db: "foo" },
        { role: "readWrite", db: "foo" }
    ]
  }
)

6、需要授权的方式启动: mongod --auth --config /usr/local/etc/mongod.conf

7、授权登录

  • 方式一: mongo 先进入然后 db.auth("bar", "bar") 授权
  • 方式二: mongo --port 27017 -u "bar" -p "bar" --authenticationDatabase "foo"

MongoDB数据导入到ElasticSearch python代码实现

ElasticSearch对文本的搜索速度真的是神速呀,基本是毫秒级别的。对于大文本,简直就是秒飞MYSQL十条街。使用python实现:

es = Elasticsearch(['10.18.6.26:9200'])
ret = collection.find({})

# 删除mongo的_id字段,否则无法把Object类型插入到Elastic
map(lambda x:(del x['_id']),ret)

actions=

for idx,item in enumerate(ret):
    i={
        "_index":"jsl",
     "_type":"text",
     "_id":idx,
        "_source":{
            # 需要提取的字段
            "title":item.get('title'),
            "url":item.get('url')
        }
    }
    actions.append(i)


start=time.time()
helpers.bulk(es,actions)

end=time.time()-start
print(end)

运行下来,20W条数据,大概用了15秒左右全部导入ElasticSearch 数据库中。

nodejs操作mongodb

前一篇博文说明了如何在win7下安装mongodb,下面简要测试一下nodejs操作mongodb:

首先安装nodejs mongodb

npm  install mongodb
var  mongodb = require('mongodb');
var  server  = new mongodb.Server('localhost', 27017, {auto_reconnect:true});
var  db = new mongodb.Db('mydb', server, {safe:true});

//连接db
db.open(function(err, db){
    if(!err){
        console.log('connect db');
        // 连接Collection(可以认为是mysql的table)
        // 第1种连接方式
        // db.collection('mycoll',{safe:true}, function(err, collection){
        //     if(err){
        //         console.log(err);
        //     }
        // });
        // 第2种连接方式
        db.createCollection('mycoll', {safe:true}, function(err, collection){
            if(err){
                console.log(err);
            }else{
                //新增数据
                // var tmp1 = {id:'1',title:'hello',number:1};
       //          collection.insert(tmp1,{safe:true},function(err, result){
       //              console.log(result);
       //          }); 
                   //更新数据
                   // collection.update({title:'hello'}, {$set:{number:3}}, {safe:true}, function(err, result){
                   //     console.log(result);
                   // });
                   // 删除数据
                       // collection.remove({title:'hello'},{safe:true},function(err,result){
        //                   console.log(result);
        //               });

                // console.log(collection);
                // 查询数据
                var tmp1 = {title:'hello'};
                   var tmp2 = {title:'world'};
                   collection.insert([tmp1,tmp2],{safe:true},function(err,result){
                   console.log(result);
                   }); 
                   collection.find().toArray(function(err,docs){
                   console.log('find');
                   console.log(docs);
                   }); 
                   collection.findOne(function(err,doc){
                    console.log('findOne');
                      console.log(doc);
                   }); 
            }

        });
        // console.log('delete ...');
        // //删除Collection
        // db.dropCollection('mycoll',{safe:true},function(err,result){

  //           if(err){

        //         console.log('err:');
        //         console.log(err);
        //     }else{
        //         console.log('ok:');
        //         console.log(result);
        //     }
  //       }); 
    }else{
        console.log(err);
    }
});

Yii框架连接mongodb数据库的代码

yii2框架是yii的升级版本,本文我们分别讲解在yii框架中如何连接数据库mongodb。

在文件夹common/config/main_local.php中加入如下代码:

<?php
return [
'components' => [
'mongodb' => [
'class' => 'yiimongodbConnection',
'dsn' => 'mongodb://localhost:27017/数据库名'
],
],
];

Ubuntu16.04安装MongoDB

最近需要用到MongoDB,我在这里记录一下安装步骤。

首先说下什么是MongoDB,摘至维基百科:

MongoDB是一种面向文档的数据库管理系统,由C++撰写而成,以此来解决应用程序开发社区中的大量现实问题;
MongoDB使用内存映射文件, 32位系统上限制大小为2GB的数据(64位支持更大的数据)。 MongoDB服务器只能用在小端序系统,虽然大部分公司会同时准备小端序和大端序系统;

1、安装开始
  
选择需要的版本
      
未分类

2、导入公钥

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4

3、创建MongoDB列表文件

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list

4、重新加载本地包数据库

sudo apt-get update

5、安装MongoDB包,我这里选择稳定版

sudo apt-get install -y mongodb-org

为防止意外升级,可以将软件包固定在当前安装的版本中:

echo "mongodb-org hold" | sudo dpkg --set-selections
echo "mongodb-org-server hold" | sudo dpkg --set-selections
echo "mongodb-org-shell hold" | sudo dpkg --set-selections
echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
echo "mongodb-org-tools hold" | sudo dpkg --set-selections

注:如果通过软件包管理器安装,则在安装期间会创建数据目录 /var/lib/mongodb和日志目录/var/log/mongodb

6、启动MongoDB

sudo service mongod start

检查日志文件的内容以/var/log/mongodb/mongod.log 获取行读数,验证进程是否已成功启动,27017是独立mongod 侦听的默认端

[initandlisten] waiting for connections on port 27017

停止MongoDB的命令

sudo service mongod stop

重启MongoDB命令

sudo service mongod restart

7、mongo在与主机相同的主机上启动shell mongod,以mongod使用默认端口27017 连接到localhost上运行的shell

mongo

注:MongoDB安装完“admin”库中默认没有用户,此时用mongo命令登录是超级管理员用户