MongoDB Enterprise4.4.2部署和原生TDE加密配置
一、MogoDB4.4.2企业版部署
1. 下载企业版MongoDB安装RPM包
--https://www.mongodb.com/download-center/enterprise
https://www.mongodb.com/download-center/enterprise/releases
社区版:http://mirrors.aliyun.com/mongodb/yum/redhat/6Server/mongodb-org/
2. 安装MogoDB4.4.2企业版
检查依赖包
rpm -qa|grep net-snmp
1、如果没有需要安装依赖包
net-snmp-5.7.2-43.el7.x86_64.rpm
net-snmp-agent-libs-5.7.2-43.el7.x86_64.rpm
如果能够联网则可以直接
yum -y install net-snmp
安装MongoDB RPM包
安装顺序如下
rpm -ivh mongodb-enterprise-server-4.4.2-1.el6.x86_64.rpm
rpm -ivh mongodb-enterprise-mongos-4.4.2-1.el6.x86_64.rpm
rpm -ivh mongodb-enterprise-shell-4.4.2-1.el6.x86_64.rpm
rpm -ivh mongodb-enterprise-cryptd-4.4.2-1.el6.x86_64.rpm
3. 启动并登录MongoDB
1、配置MongoDB
ls /etc/mongod.conf
**********************************************************
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /opt/mongodb/log/mongod.log
# Where and how to store data.
storage:
dbPath: /opt/mongodb/data
journal:
enabled: true
# engine:
# wiredTiger:
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
#security:
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options
#auditLog:
#snmp:
security:
enableEncryption: true
encryptionKeyFile: /opt/mongodb/key/mongodb-keyfile
**********************************************************
4. 常用操作
设置MongoDB的管理员密码
创建数据库
use admin
db.createUser({ user: "admin", pwd: "admin", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
##验证登录,如果返回1,则证明密码生效
> db.auth("admin", "admin")
1
创建一个db库test,并分配账号和密码****
#登录管理员
> use admin
> db.auth("admin","admin")
#创建test库
> use test
> db.createUser({ user: "test", pwd: "test", roles: [{ role: "dbOwner", db: "test" }] })
switched to db test
> db.firstCollection.save({"name":"yzh","age":"25"})
WriteResult({ "nInserted" : 1 })
> db.firstCollection.find({name:"yzh"})
{ "_id" : ObjectId("5de12c9c771bf721cc7a0b07"), "name" : "yzh", "age" : "25" }
>
忘记密码的处理方式
use dbname
db.auth("username","password")
Error: Authentication failed.
0
提示:密码错误,已经忘记密码
1.注释掉认证配置
vi /etc/mongod.conf
将以下两行注释掉
security:
authorization: enabled
#security:
#authorization: enabled
2.修改密码
此时使用库就不需要进行账户,密码验证了
mongo --host IP
use dbname
db.changeUserPassword("username","password")
修改配置文件/etc/mongod.conf取消注释
重启
/etc/init.d/mongod reload
3.登录验证
mongo --host IP
use dbname
db.auth("username","new-password")
1
提示1,证明新密码修改成功。
----------------日常维护-------------------------------
--启动MongDB
mongod -f /etc/mongod.conf
--关闭MongDB
mongod -f /etc/mongod.conf --shutdown
本地连接登录
mongo
查看数据库版本
db.version()
查看数据库状态
db.stats()
查看所有数据库
show dbs
查看当前数据库
db
db.getName()
查看当前数据库的所有集合(表的概念)
show collections
基本管理命令
1、show users; // 查看当前库下的用户
2、db.dropUser("eggadmin") // 删除用户
3、db.updateUser("admin",{pwd:"password"}); // 修改用户密码
4、db.auth("admin","password"); // 密码认证 (数据库设置了密码,要认证后才能连接成功)
5、show tables // 列出该库下所有表
------------数据操作---------------------------------
MongoDB 创建数据库
use DATABASE_NAME
如果数据库不存在,则创建数据库,否则切换到指定数据库
use jm
创建集合
方法1:
> use banana;
switched to db banana #相当于use banana ,不同的是(从mysql关系型数据库角度解释),在mongodb中banana允许未创建情况下use banana,在创建数据表后,即创建了banana,否则banana不会创建
> db.createCollection('a'); #创建集合a,a相当于mysql中的数据表
{ "ok" : 1 } # 提示创建成功
> db.createCollection('b');
{ "ok" : 1 }
> show collections;
a
b
方法2:
> db.c.insert({username:"mongodb"}) #向c集合插入数据
WriteResult({ "nInserted" : 1 }) ->成功写入文档
> show collections
a
b
c
> db.c.find() #显示数据集合中所有数据,当前仅一条
{ "_id" : ObjectId("5743c9a9bf72d9f7b524713d"), "username" : "mongodb" }
> db.log.find().pretty(); # 格式化打印结果
{
"_id" : ObjectId("5743c9a9bf72d9f7b524713d"),
"uid" : 0,
"name" : "mongodb",
"age" : 6,
"date" : ISODate("2018-01-03T08:37:00.214Z")
}
> db.c.drop() #删除c集合
true
> db.c.find() #c集合置空
批量插入数据
> for(i=0;i<10000;i++){ db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new Date()}); } #批量插入10000个数据
#查询集合中的记录数
> db.log.find()
说明:默认每页显示20条记录,当显示不下的的情况下,可以用it迭代命令查询下一页数据
#设置每页显示数据的大小:每页显示50条记录
> DBQuery.shellBatchSize=50;
#查看第1条记录
> db.log.findOne()
#查询总的记录数
> db.log.count()
#删除集合中所有记录
> db.log.remove({})
#集合中数据的原始大小
> db.log.dataSize()
#集合中索引数据的原始大小
> db.log.totalIndexSize()
#集合中索引+数据压缩存储之后的大小
> db.log.totalSize()
#集合中数据压缩存储的大小
> db.log.storageSize()
mongoexport / mongoimport
本机备份恢复
备份
mongodump -h 127.0.0.1 -d test -o /opt/mongodb/backup
恢复
mongorestore-h 127.0.0.1:27017 -d test /opt/mongodb/backup/test
异机备份恢复
源库主机192.168.88.201
mongodump -h 127.0.0.1 -d jm -o /opt/mbackup
scp -r jm/ root@192.168.70.21:/opt/mongodb/backup
目标库主机192.168.70.21
目标库可以不用重建被恢复的数据库名
mongorestore -h 127.0.0.1:27017 -d jm /opt/mongodb/backup/jm
二、MongDB企业版TDE配置
Configure Encryption
Local Key Management
--配置文件里配置加密参数
vim /etc/mongod.conf
security:
enableEncryption: true
encryptionKeyFile: /opt/mongodb/key/mongodb-keyfile
创建密钥文件
openssl rand -base64 32 > /opt/mongodb/key/mongodb-keyfile
--修改密钥文件权限
chmod 600 /opt/mongodb/key/mongodb-keyfile
To use the key file, start mongod with the following options:
--enableEncryption,
--encryptionKeyFile <path to keyfile>,
mongod --enableEncryption --encryptionKeyFile mongodb-keyfile
--关闭MongDB
mongod -f /etc/mongod.conf --shutdown
--启动MongDB
mongod -f /etc/mongod.conf
[initandlisten] Encryption key manager initialized with key file: <path to keyfile>
要检查是否已在数据库中成功启用加密,可以使用以下命令检查
db.serverCmdLineOpts().parsed.security
也开通通过strings来查看数据文件
配置加密前
加密后
注意:MongoDB 3.6.8-4.x无法加密现有数据库。您必须关闭实例,清除数据文件目录,配置实例以进行加密,然后启动实例。