Mongodb安装与使用

 

为什么要用mongodb?

原因很简单,业务需要.业务需要灵活的添加删除字段. 之前考虑过有竖表,大字段存储json字符串. 当然了mysql5.7已经原生支持了json类型.而最新版本的mysql8 已经支持关系型与文档型同时支持. 嗯,还有. PostgreSQL很早就支持了关系型与文档型并存.

结果就是使用mongodb.

install

  • 前往下载页面 下载说明页面
  • 将下载好的安装包上传到待安装的服务器下
  • 用户组信息设置
groupadd mongodb
useradd -g mongodb mongodb
  • 将文件移动到mongodb用户目录下
mv mongodb-linux-x86_64-rhel62-3.6.5.tgz /home/mongodb/
chown mongodb:mongodb mongodb-linux-x86_64-rhel62-3.6.5.tgz
  • 切换到mongodb用户进行操作
su - mongodb
  • 新建data目录
mkdir /home/mongodb/mongodbData
  • 先以非授权的模式启动MongoDB
cd mongodb-linux-x86_64-rhel62-3.6.5/bin
./mongod --dbpath=/home/mongodb/mongodbData
  • 新开启一个连接窗口,同样是mongodb用户
cd mongodb-linux-x86_64-rhel62-3.6.5/bin
./mongo
  • 新建具有root角色的用户admin(需要大概了解mongodb的用户角色模型)
> use admin  ## 切换到admin数据库
switched to db admin
> db.createUser({user:"admin",pwd:"123456",roles:["root"]}) ## 添加用户
Successfully added user: { "user" : "admin", "roles" : [ "root" ] }
> db.auth("admin", "123456")   ##验证测试一下
  • 以授权的方式启动Mongo,给使用的数据库添加用户

停掉之前启动的mongodb server Ctrl+C

##添加参数再重新启动
./mongod --dbpath=/home/mongodb/mongodbData --auth

##另一个窗口再重新连接server
[mongodb@localhost bin]$ ./mongo
MongoDB shell version v3.6.5
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.5
> 

  • 添加业务使用的用户
##1. 指定数据库(mongodb 用户与在哪个数据库创建有关)
use monitor
##2. 执行下列添加会报错 提示没有登录验证
db.createUser({user: "root", pwd: "123456", roles: [{ role: "dbOwner", db: "monitor" }]})
##3. 登录之前创建的root角色用户
use admin
db.auth("admin", "123456")
##4. 再次添加业务账户
> use monitor
switched to db monitor
> db.createUser({user: "root", pwd: "123456", roles: [{ role: "dbOwner", db: "monitor" }]})
Successfully added user: {
        "user" : "root",
        "roles" : [
                {
                        "role" : "dbOwner",
                        "db" : "monitor"
                }
        ]
}

##5. 测试新添加的用户 Ctrl +C 关闭当前连接
> ^C
bye
[mongodb@localhost bin]$ ./mongo
MongoDB shell version v3.6.5
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.5
> use monitor
switched to db monitor
> db.auth("root","123456")
1
> db.test.insert({"key":"testVlaue"}) ## 在test collection 中插入key=testValue
WriteResult({ "nInserted" : 1 })
> db.test.find().pretty()  ## 查询test collection 并将结果格式化
{ "_id" : ObjectId("5b2659117456309372127c10"), "key" : "testVlaue" }
> 

  • 将mongodb加入PATH环境变量
su - root
vi /etc/profile
export PATH=/home/mongodb/mongodb-linux-x86_64-rhel62-3.6.5/bin:$PATH
source /etc/profile
  • 将mongodb作为后台进程启动
##1. 新增mongodbStart.sh 以下是文件内容 指定了数据存储目录 开启账号认证 绑定监听0.0.0.0
nohup mongod --dbpath=/home/mongodb/mongodbData --auth --bind_ip_all &

##2. 修改文件权限
chmod 755 mongodbStart.sh

##3. 用mongodb用户启动脚本
[mongodb@localhost ~]$ ./mongodb*.sh
[mongodb@localhost ~]$ nohup: appending output to 'nohup.out'

[mongodb@localhost ~]$ 

##4. 检查并测试
[mongodb@localhost ~]$ ps -ef |grep mongodb
root       5692 169953  0 20:55 pts/0    00:00:00 su - mongodb
mongodb    5693   5692  0 20:55 pts/0    00:00:00 -bash
mongodb    9119      1  4 20:59 pts/0    00:00:01 mongod --dbpath=/home/mongodb/mongodbData --auth
mongodb    9862   5693  0 20:59 pts/0    00:00:00 ps -ef
mongodb    9863   5693  0 20:59 pts/0    00:00:00 grep mongodb
root     180647 180540  0 20:35 pts/2    00:00:00 su - mongodb
mongodb  180648 180647  0 20:35 pts/2    00:00:00 -bash

[mongodb@localhost ~]$ mongo
MongoDB shell version v3.6.5
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.5
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        http://docs.mongodb.org/
Questions? Try the support group
        http://groups.google.com/group/mongodb-user
> use monitor
switched to db monitor
> db.auth("root","123456")
1
> 
##5. 如果其他用户要通过shell访问 ,修改mongodb的上级目录权限,确保其他用户可以看到他并且有权限执行它
  • 为monitor库的用户root用户添加admin库clusterMonitor角色
##1. 登录admin库 管理员
use admin
db.auth("admin","123456")

##2. 登录到monitor库
use monitor
##3. 给用户添加角色
db.grantRolesToUser("root",[{role:"clusterMonitor",db:"admin"}])

##4. 查询用户信息
db.getUser("root");

使用

  1. shell连接菜鸟教程
  2. java api .EAP 已经支持了mongodb 提供了qlanguage_mongodb 模块 spring环境直接注入com.hfvast.db.mongodb.MongoDbServicebean就可以

备份

编写定时任务脚本 核心就是下面这一句

mongodb_backup_home=/home/mongodb/backup
mongodb_home=/home/mongodb/mongodb-linux-x86_64-rhel62-3.6.5

# -h 数据库ip -d 数据库名 -u 用户名 -p 密码 --authenticationDatabase=用户认证的数据库名(跟mongo的用户认证策略有关) -o 备份到哪个目录下

$mongodb_home/bin/mongodump -h 127.0.0.1 -d monitor -u root -p 123456 --authenticationDatabase=monitor -o $mongodb_backup_home/data`date +%F` >> $mongodb_backup_home/dbfullbak.log &&

说明

  1. mongodb 连接是js api 没有sql 直观 简洁
  2. mongodb 默认提供了一个批量导入csv文件的工具,但是在批量导入数据时遇到了excel中大数字被默认转换成了64位Integer. 数据类型不能手动指定.只得生写了 导入程序 用java api 指定数据类型
  3. 运维工具相比mysql 等关系型数据库 很少且不是很稳定 官方出的 MongoDB Compass Community经常卡死.
  4. 推荐一个新了解的GUI Nosqlclient 官网地址:https://nosqlclient.com/正在使用中
  5. mongodb提供了同步驱动和异步驱动两种. mysql8 提供了基于X协议的异步驱动