乐趣区

mongodb安装与应用

一、安装数据库
如果必要可先更新 yum 包管理,下面以 CentOS 系统为例:
$ yum -y update
1、安装 Mongodb
查看当前系统版本
$ cat /etc/redhat-release
打开 https://repo.mongodb.org/yum/…,选择适合自己系统的 mongo 版本,然后编辑 Mongodb 安装源,下面以 3.6 为例:
$ sudo vi /etc/yum.repos.d/mongodb-org-3.6.repo
编辑内容(根据自己的 mongo 版本替换下面的 3.6 字样):
[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
安装:
$ yum install mongodb-org
2、修改 Mongo 配置
mongo 配置文件路径:/etc/mongod.conf,但如果用 mongod 命令直接运行(非 service 运行),此时若不用 - f 指定配置文件,mongo 会使用内在配置,dbpath 也默认存放在 /data/db 下
$ vi /etc/mongod.conf

#————————————————————————

# 可修改数据库存放位置
storage:
dbPath: /var/lib/mongodb

# 若要支持远程连接,需将默认的 127.0.0.1 改为:
net:
bindIp: 0.0.0.0

# 若需数据库权限认证,开启下面配置:
security:
authorization: enabled
若远程连接工具 Robo 3T 还是不能连接,需在防火墙增加端口:
$ sudo /sbin/iptables -I INPUT -p tcp –dport 27017 -j ACCEPT
二、运行数据库
1、启动
$ service mongod start # 自动使用配置 /etc/mongod.conf

# 或手动指定配置文件启动:
$ sudo mongod -f /etc/mongod.conf –fork # –fork 后台运行

# 若以权限认证运行
$ sudo mongod -f /etc/mongod.conf –auth –fork
若启动出现 timeout 错误时,可查看 service 里的 pid 与 config 里的 pid 是否相同,不一致则修改:
$ sudo vi /usr/lib/systemd/system/mongod.service # 修改 pid
$ systemctl daemon-reload # 重新加载 service 服务
$ service mongod start
2、重启
$ service mongod restart
3、关闭
$ service mongod stop
或手动关闭
$ sudo mongod -f /etc/mongod.conf –shutdown
4、随系统启动
默认安装后即随机启动,无须设置
$ chkconfig mongod on
三、操作数据库
1、数据管理
1.) 数据库操作
# 进入 mongo
$ mongo

# 显示当前数据库,默认定位 test 数据库
> db;

# 显示所有数据库
> show dbs;

# 切换 / 创建数据库
> use xxx;

# 从指定主机克隆数据库
> db.cloneDatabase(‘ 主机 ’);

# 从指定主机上复制 A 库数据到 B 库
> db.copyDatabase(‘A 库 ’, ‘B 库 ’, ‘ 主机 ’);

# 删除数据库
> db.dropDatabase();

# 修复数据库
> db.repairDatabase();

# 查看当前 db 的链接机器地址
> db.getMongo();

# 退出 mongo
> exit;
2.) 集合 (表)/ 记录操作
# 显示所有集合
> db.getCollectionNames();

# 创建集合
> db.createCollection(‘users’, {size: 1024, max: 1000}); # 最大 1M,1000 条

# 显示第一条记录
> db.users.findOne();

# 显示集合下所有记录
> db.users.find();

# 新增记录
> db.users.save({name: ‘wang’, age: 8});

# 根据条件查询
> db.users.find({age: 8});

# 修改记录(后面两个参数:第一个表示找不到则新建一条,第二个表示更新多条)
db.users.update({name: ‘wang’}, {$set: {sex: ‘male’}}, false, true)

# 删除记录
db.users.remove({age: 8});
2、用户管理
1.) 用户类型
常用的用户类型有:
read/readWrite:读写指定数据库 userAdminAnyDatabase:所有数据库的用户管理权限,有分配角色和用户的权限,但没有读写的权限,在 admin 库授权 readWriteAnyDatabase:所有数据库的读写权限,在 admin 库授权 root:超级账号,超级权限,在 admin 库授权
2.) 常用用户指令
# 显示所有用户
> show users;

# 新建用户
> db.createUser({user:’ 用户名 ’,pwd:’ 密码 ’,roles:[{role:’ 角色 ’,db:’ 库 ’}]});

# 若当前数据库与目标库相同,可简写:
> db.createUser({user:’ 用户名 ’,pwd:’ 密码 ’,roles:[‘ 角色 ’]});

# 追加用户权限
> db.grantRolesToUser(‘ 用户名 ’,[{role:’ 角色 ’,db:’ 库 ’}]);

# 修改用户权限
> db.updateUser(‘ 用户名 ’,{roles:[‘ 角色 1 ′,’ 角色 2 ’]});

# 更新密码
> db.changeUserPassword(‘ 用户名 ’,’ 密码 ’);
# 或
> db.updateUser(‘ 用户名 ’,{pwd:’ 密码 ’});

# 删除用户
> db.dropUser(‘ 用户名 ’);
3.) 管理用户创建
root、*AnyDatabase 角色用户、cluster 集群等用户只能在 admin 库下创建
> use admin;

# 超级管理员
> db.createUser({user:’root’,pwd:’ 密码 ’,roles:[‘root’]});

# user 管理员账号
> db.createUser({user:’ 用户名 ’,pwd:’ 密码 ’,roles:[‘userAdminAnyDatabase’]});

# 任意库读写账号
> db.createUser({user:’ 用户名 ’,pwd:’ 密码 ’,roles:[‘readWriteAnyDatabase’]};

# 普通读写用户(可以在 admin 库下创建,但认证时也需在 admin 库)
> db.createUser({user:’ 用户名 ’,pwd:’ 密码 ’,roles:[{role:’readWrite’,db:’ 业务库 ’}]});
4.) 普通用户创建
mongoDB 的权限是跟随库的,用户在哪个库下创建的,则需在哪个库进行 auth 认证,如果认证库和读写目标库一致,则连接时 authSource 参数可省略(见第四节:连接数据库)
> use xxx;
> db.createUser({user:’ 用户名 ’,pwd:’ 密码 ’,roles:[‘readWrite’]);
如果提示 SCRAM-SHA-256 requires undigested passwords 错误,需要加 mechanisms,如下:
> db.createUser({user:’ 用户名 ’,pwd:’ 密码 ’,roles:[‘readWrite’],mechanisms: [‘SCRAM-SHA-1’]});
四、连接数据库
1、shell 方式连接:
1.)普通登录
如果 mongoDB 未开启认证模式,所有用户的权限与 root 一样,任意操作。
$ mongo

# 自定义 host 和端口
$ mongo –host 主机 –port 端口
2.)认证登录
mongoDB 的权限是跟随库的,普通用户在哪个库新建授权,就需要在哪个库进行 auth 验证
$ mongo –host 主机 –port 端口 -u ‘ 用户名 ’ -p ‘ 密码 ’ –authenticationDatabase ‘ 身份认证所用库 ’
root 和 *AnyDatabase 角色的权限只能在 admin 数据库里认证,如:
$ mongo -u root -p 123456 –authenticationDatabase admin
也可以进入数据库后再授权:
$ mongo
> use 认证数据库;
> db.auth(‘ 用户名 ’, ‘ 密码 ’);
2、URI 方式连接:
1.)未认证数据库
mongo:// 主机: 端口 / 数据库名
2.)认证数据库
a.)普通数据用户
若当前用户认证的数据库与要操作的数据库相同,连接方式如下:
mongo:// 用户名: 密码 @主机: 端口 / 数据库名
若不同,则需添加 authSource,例如:在 admin 库里认证了,角色 db 却是 xxx
mongo:// 用户名: 密码 @主机: 端口 /xxx?authSource=admin
b.)root 和所有数据库用户
若连接用户是 root、*AnyDatabase 角色、cluster 集群的认证库都是 admin
mongo:// 用户名: 密码 @主机: 端口 / 数据库名?authSource=admin
c.)认证机制
mongoDB 支持多种认证机制,常用的有 ’MONGODB-CR’ 和 ‘SCRAM-SHA-1’ 两种,官方推荐 ‘SCRAM-SHA-1’,此时不需要带在 URI 里,但如果是 ’MONGODB-CR’ 类型需加添加在 URI 上。
mongo:// 用户名: 密码 @主机: 端口 / 数据库?authMechanism= 认证机制 &authSource= 身份认证所用库

退出移动版