为什么要用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");
使用
- shell连接菜鸟教程
- java api .EAP 已经支持了mongodb 提供了
qlanguage_mongodb
模块 spring环境直接注入com.hfvast.db.mongodb.MongoDbService
bean就可以
备份
编写定时任务脚本 核心就是下面这一句
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 &&
说明
- mongodb 连接是js api 没有sql 直观 简洁
- mongodb 默认提供了一个批量导入csv文件的工具,但是在批量导入数据时遇到了excel中大数字被默认转换成了64位Integer. 数据类型不能手动指定.只得生写了 导入程序 用java api 指定数据类型
- 运维工具相比mysql 等关系型数据库 很少且不是很稳定 官方出的
MongoDB Compass Community
经常卡死. - 推荐一个新了解的GUI Nosqlclient 官网地址:https://nosqlclient.com/正在使用中
- mongodb提供了同步驱动和异步驱动两种. mysql8 提供了基于X协议的异步驱动