一、MongoDB的安装
1. 单机单节点安装
2. MongoDB集群安装(4.2开始支持事务,但需安装集群,本地以单机多端口为集群案例)
3. MongoDB集群创建db,创建新用户[免密模式下,未开启auth密码验证]
4. MongoDB副本集安装步骤
5. MySQL的数据迁移到MongoDB (通过CSV文件)
1. 下载地址:
https://www.mongodb.com/download-center/community
2. 安装命令:
1) 写配置文件
vim /usr/local/mongodb/mongodb.conf
# 端口
port=27017
# 数据库路径
dbpath=/data/mongodb/db
# 日志文件
logpath=/data/mongodb/log/mongodb.log
## 保留进程ID的文件路径
pidfilepath=/data/mongodb/mongodb.pid
# 设置后台运行
fork=true
# 日志输出方式
logappend=true
#最大同时连接数 默认2000
maxConns=5000
#允许所有IP访问,如果要限制访问,可指定以逗号分隔的ip地址
bind_ip=0.0.0.0
#是否启用身份认证
auth=false
##### [**先注释掉,启动的时候有坑,会导致无法启动] #####
# 是否支持HTTP形式访问 [**先注释掉,启动的时候有坑,会导致无法启动]
# nohttpinterface=true
# rest=false
## 来禁用预分配的数据文件,会缩短启动时间,但在正常操作过程中,可能会导致性能显著下降。
# noprealloc=true
## 设置为true,使用较小的默认数据文件大小。smallfiles减少数据文件的初始大小,并限制他们到512M,也减少了日志文件的大小
## 并限制他们到128M。如果数据库很大,各持有少量的数据,会导致mongodb创建很多文件,会影响性能。
# smallfiles=true
##### [**先注释掉,启动的时候有坑,会导致无法启动] #####
2) /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf # 根据指定配置文件,启动mongodb
3. 设置守护进程(即开机自启动)
1) vim /lib/systemd/system/mongodb.service
写入如下文件内容:
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongodb.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
并执行 :wq
2) systemctl list-unit-files | grep mongodb.service # 查看开机自启动项列表中是否有mongodb
3) cd /lib/systemd/system && systemctl enable mongodb.service # 设置mongodb为开机自启动项
4) systemctl start|stop|restart mongodb.service # 启动|停止|重启mongodb
4. mongo 和 mongod 文件的区别:
/usr/local/mongodb/bin/mongo # 是进入命令行模式的入口文件
/usr/local/mongodb/bin/mongod # 是mongodb的shell命令模式的启动文件
注: /usr/local/mongodb/ 是我本地的安装目录,需自行修改为安装目录
5. mongodb设置账户密码登录
1) 创建用户
A) 创建管理员
use admin
db.createUser({user:"adminUser",pwd:"123456",roles: [{role: "userAdminAnyDatabase",db:"admin"}]})
B) 创建普通用户
use foo
db.createUser({user:"demoUser",pwd:"123456",roles: ["readWrite","dbAdmin","userAdmin"]})
C) db.system.users.find().pretty() // 查看已创建的用户
D) db.system.users.remove({user:"demoUser"}) //删除指定用户
3) 用户名密码登录
A) vim /usr/local/mongodb/mongodb.conf
修改以下内容
auth=true # mongo命令行登录模式,设置为账户密码登录
保存退出,并重启mongodb (systemctl restart mongodb.service)
B) 账号密码登录 [注意: 用户在哪个数据库创建,就在哪个库登录,如amdinUser在admin库创建,在admin库登录]
use admin
db.auth("adminUser","123456") // 账户密码登录
4) 内建的角色
数据库用户角色:read、readWrite;
数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
内部角色:system
角色说明:
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
1) openssl rand -base64 64 > ./mongod-keyfile # 随机生成64位(可自己定)长度密码串,写到mongod-keyfile中,并修改权限(在类unix系统上,keyFile文件只能有文件所有者权限,建议600)
2) 配置三个主机配置文件,三个文件端口必须不一致,可区分文件路径和日志路径(自选),以mongod0.conf文件为例:
A) vim /usr/local/mongodb/mongod0.conf
粘贴以下文件内容:
# mongod0.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /usr/local/mongodb/mongod0 #此处的数据存储路径目录改一下,以区分
#dbPath: /usr/local/mongodb/mongod1 #此处的数据存储路径目录改一下,以区分
#dbPath: /usr/local/mongodb/mongod2 #此处的数据存储路径目录改一下,以区分
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /data/mongodb/log/mongod0.log #此处的日志文件路径改一下,以区分
#path: /data/mongodb/log/mongod1.log #此处的日志文件路径改一下,以区分
#path: /data/mongodb/log/mongod2.log #此处的日志文件路径改一下,以区分
# network interfaces
net:
port: 27017 #因在同一主机上,需要一个不同的端口,默认27017
#port: 27018 #因在同一主机上,需要一个不同的端口,27018(可能用于GUI图形工具端口,自行修改)
#port: 27019 #因在同一主机上,需要一个不同的端口,27019
bindIp: 0.0.0.0
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
security:
authorization: enabled
#clusterAuthMode: keyFile
keyFile: /usr/local/mongodb/mongod-keyfile
#operationProfiling:
replication:
replSetName: rs1
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:
保存并退出
2) cp /usr/local/mongodb/mongod0.conf /usr/local/mongodb/mongod1.conf && cp /usr/local/mongodb/mongod0.conf /usr/local/mongodb/mongod2.conf # 将配置文件复制两份,更换端口,日志路径,数据保存路径
3) 配置mongodb集群的开机自启动
A) vim /lib/systemd/system/mongodbCluster.service
粘贴以下内容:
[Unit]
Description=mongodbCluster
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongod0.conf && /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongod1.conf && /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongod2.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongod0.conf && /usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongod1.conf && /usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongod2.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
保存并退出
B) systemctl enable mongodbCluster.service # 设置开机自启动
C) systemctl start|stop|restart|status mongodbCluster.service # 启动|停止|重启|查看状态
***注意: mongoDB的连接必须指定数据库,默认连接admin库
1.mongodb集群创建新用户,创建新db
1) mongo "127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019"; // 格式:mongo "host1,host2,host3,..."; // host一般为域名,或 ip:port
2) use admin;
3) db.auth("user","pwd"); // 登录管理员账号
4) db.createUser({user: "username",pwd: "pwd",roles: [ { role: "readWrite", db: "db_test" } ]} ); // 创建新数据库的新用户,db_test是新创的db名,mongodb的用户是和db绑定的
5) use admin;
6) db.auth("newUser","newPwd"); // 登录新创建的账号密码
7) use db_test; // 切换到新的db
8) db.test.insert({"name":"testDemoData"}); // 新建测试集合,因为新db是空的
9) show tables; // 查看db_test库下的集合列表,同 show collections;
2. 创建admin数据库的管理员和普通用户
db.createUser({user:"root",pwd:"funplus12365",roles: [{role: "userAdminAnyDatabase",db:"db_isr"}]}) // 管理员,指定数据库
db.createUser({user:"toDbUser",pwd:"funplus12365",roles: ["readWrite","dbAdmin","userAdmin"]}) // 普通用户
3. 创建新的数据库db,并创建新数据库db的管理员
mongo 127.0.0.1:27017,127.0.0.2:27017,127.0.0.3:27017/admin -u admin -p 123456 // 切换admin库,并登陆;
use db_test; // 切换到你所需要创建的数据库下面
db.createUser({user:"testAdmin",pwd:"123456",roles: [{role:"dbOwner",db:"db_test"}]});// 创建数据库db_test的管理员testAdmin,并设置密码,和权限
// 重启mongodb集群服务***(切记)
systemctl restart /lib/systemd/system/configure.service
systemctl restart /lib/systemd/system/shard01.service
systemctl restart /lib/systemd/system/shard02.service
systemctl restart /lib/systemd/system/shard03.service
systemctl restart /lib/systemd/system/mongos.service
// 登陆新的数据库(testAdmin)
mongo 127.0.0.1:27017,127.0.0.2:27017,127.0.0.3:27017/db_test -u testAdmin -p 123456 // 切换db_test库,并登陆;
4. *****注意:
1) mongo 命令行模式下,每个会话session,只允许登录一次(即需要切换账号密码时,需要先退出mongo,重新进入mongo命令行界面)
A) 配置文件master.conf
#master.conf
dbpath=/data/mongodb/mongoShardMode2/data/master
logpath=/data/mongodb/mongoShardMode2/log/master.log
pidfilepath=/data/mongodb/mongoShardMode2/master.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=0.0.0.0
port=27017
oplogSize=10000
fork=true
#noprealloc=true
B) 配置文件master.conf
#slaver.conf
dbpath=/data/mongodb/mongoShardMode2/data/slaver
logpath=/data/mongodb/mongoShardMode2/log/slaver.log
pidfilepath=/data/mongodb/mongoShardMode2/slaver.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=0.0.0.0
port=27018
oplogSize=10000
fork=true
#noprealloc=true
C) 配置文件arbiter
#arbiter.conf
dbpath=/data/mongodb/mongoShardMode2/data/arbiter
logpath=/data/mongodb/mongoShardMode2/log/arbiter.log
pidfilepath=/data/mongodb/mongoShardMode2/arbiter.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=0.0.0.0
port=27019
oplogSize=10000
fork=true
#noprealloc=true
启动命令
/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongoShardConf2/master.conf && /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongoShardConf2/slaver.conf && /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongoShardConf2/arbiter.conf
关闭命令
/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongoShardConf2/master.conf && /usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongoShardConf2/slaver.conf && /usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongoShardConf2/arbiter.conf
// dev环境下非root用户,sudo
sudo /opt/mongodb-linux-x86_64-rhel70-4.2.2/bin/mongod --config /opt/mongodb-linux-x86_64-rhel70-4.2.2/replicaSetConf/master.conf && sudo /opt/mongodb-linux-x86_64-rhel70-4.2.2/bin/mongod --config /opt/mongodb-linux-x86_64-rhel70-4.2.2/replicaSetConf/slaver.conf && sudo /opt/mongodb-linux-x86_64-rhel70-4.2.2/bin/mongod --config /opt/mongodb-linux-x86_64-rhel70-4.2.2/replicaSetConf/arbiter.conf
1) 将数据导入mongodb
/usr/local/mongodb/bin/mongoimport --db 目标数据库 --collection 目标数据集合 --type csv --headerline --ignoreBlanks --file 数据源文件 # 将数据源文件(csv格式)导入到目标数据库的目标集合中
实例:
/usr/local/mongodb/bin/mongoimport --db db_isr --collection tb_isr_visitors --type csv --headerline --ignoreBlanks --file /root/csv/tb_isr_records_1.csv # 将csv文件导入mongodb的db_isr.db_isr_visitors集合中
RDBMS(关键字/解释) | MongoDB(关键字/解释) |
---|---|
数据库(database) | 数据库(database) |
表格(table) | 集合(collection) |
行(row) | 文档(document) |
列(column) | 字段(field) |
表联合(table joins) | 嵌入文档() |
索引(index) | 索引(index) |
主键 | 主键(MongoDB提供了key为 _id) |
Mysqld(服务端入口文件) | mongod(服务端入口文件) |
集合命名空间 | 描述 |
---|---|
dbname.system.namespaces | 命名空间列表 |
dbname.system.indexs | 索引列表 |
dbname.system.profile | 包含数据库概要信息 |
dbname.system.users | 可访问数据库的用户列表 |
dbname.local.sources | 包含复制对端(slave)的服务器信息和状态 |