阿里云Linux CentOS安装MongoDB

1 新版本2022-03-10

1.1 安装数据库并运行

# 这是安装指南 https://docs.mongodb.com/guides/server/install/?spm=a2c4g.11186623.0.0.3fe25dddBNMBQU
# 去https://www.mongodb.com/download-center#production查看下载地址。

下载、解压、移动、设置环境变量:

cd ~
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.2.22.tgz
tar zxvf mongodb-linux-x86_64-rhel70-3.2.22.tgz
mv mongodb-linux-x86_64-rhel70-3.2.22 /user/local/mongodb3.2.22

export PATH=/usr/local/mongodb3.2.22/bin:$PATH

运行:

# 建立MongoDB数据目录,不然默认是/data/db
mkdir -p /root/mongo/data
# 运行
mongod --dbpath /root/mongo/data

不过这个不是后台运行,可以开个tmux运行。也可以通过配置文件运行:

touch /usr/local/mongodb3.2.22/mongod.conf

里面的内容:

systemLog:
    destination: file
    path: /root/mongo/mongod.log
    logAppend: true
security:
    authorization: enabled
storage:
    dbPath: /root/mongo/data
    directoryPerDB: true
net:
    port: 27017
    unixDomainSocket:
        enabled: false
processManagement:
    fork: true
    pidFilePath: /root/mongo/mongod.pid

然后运行:

mongod -f /usr/local/mongodb3.2.22/mongod.conf

这种方式就到了后台。

1.2 安装SHELL

wget https://fastdl.mongodb.org/linux/mongodb-shell-linux-x86_64-rhel70-5.0.6.tgz
这个好像不一定要与mongodb一个版本。
tar -xvzf mongodb-shell-linux-x86_64-rhel70-5.0.6.tgz
mv mongodb-shell-linux-x86_64-rhel70-5.0.6 /usr/local/mongo5.0.6

运行:

cd /usr/local/mongo5.0.6
mongo --host localhost --port 27017

新建一个超管,然后关服务器:

> use admin
> db.createUser(
  {
    user: "superuser",
    pwd: "abcabc111",
    roles: [ "root" ]
  }
)
> db.shutdownServer()
> exit

重启服务:

mongod --auth
# 这时候就需要auth后,才能show users
> use admin
> db.auth("superuser", "abcabc111")

当然也可以直接这样授权运行:

mongo --host 127.0.0.1 -u superuser -p 'abcabc111' --authenticationDatabase admin


以下是复杂版本

安装Server

进官网,点击Try Free,选择合适的版本。

image.png

wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.2/x86_64/RPMS/mongodb-org-server-4.2.0-1.el7.x86_64.rpm

直接安装

yum -y install mongodb-org-server-4.2.0-1.el7.x86_64.rpm

就可以了。查看状态,启动,开机启动:

systemctl status mongod
systemctl start mongod
systemctl enable mongod

好了。

配置

vi /etc/mongod.conf

然后修改日志、数据的目录,以及允许远程访问,开启用户认证。


image.png

然后按照设置好的路径,把相应的目录给建好了,并修改权限,很重要!

chown -R mongod:mongod /data/mongodb

然后重启mongod服务:

systemctl restart mongod

如果还重启失败,看日志,会发现Failed to unlink socket file /tmp/mongodb-27017.sock Operation not permitted这样的提示,其实是这个文件属于root,不属于mongod,没权限,删掉即可。

安装Shell

也是直接下载:


image.png

然后按照,跟Server类似,装好了,就可以输入mongo运行了。

其实也可以直接下载TGZ文件,解压设置好PATH,一步到位,就省得分开装mongod,mongo,mongos。

远程连接

MongoDB默认无密码登录,有点危险。admin数据库是一个特殊的权限数据库,加进该数据库的用户是超级用户,可以操作所有数据库。然后开启认证。

[root@master ~]# mongo
MongoDB shell version v4.2.0
> use admin
switched to db admin
> db.createUser({user:'admin', pwd: 'admin', roles: ['root']});
Successfully added user: { "user" : "admin", "roles" : [ "root" ] }
> db.auth('admin', 'admin')
1

添加用户都是添加到特定的数据库,但是通过赋权限,其实该用户也能操作别的库。贴上官网解释:


image.png

然后去阿里云打开安全组的规则:


image.png

如果设置了iptables防火墙,也要打开相应的端口。

之后就可以远程访问数据库了,因为这个用户是建立在admin库的,所以Authentication Database一定要填admin才行。


image.png

连接成功,可以看到3个默认的数据库admin config local。


image.png

如果我们在别的数据库下,创建用户,该用户连上来就只能看到自己的数据库。比如这样,就新建了一个数据库的管理员用户,这样挺好的。

use abc # 一定要先切过来,不放心的还可以insert一条collection记录
db.createUser({'user': 'test', 'pwd':'test', 'roles':[{role: 'dbOwner', db: 'abc'}]})

另外,推荐使用Robo 3T来图形化管理MongoDB。

内置角色说明

有如下内置角色,其中有的角色设置需指定数据库。

  1. 数据库用户角色:read、readWrite;
  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  4. 备份恢复角色:backup、restore;
  5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  6. 超级用户角色:root
    这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
  7. 内部角色:__system
    角色权限:
  • read:允许用户读取指定数据库
  • readWrite:允许用户读写指定数据库
  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
  • userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
  • clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  • readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
  • readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
  • userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
  • dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
  • root:只在admin数据库中可用。超级账号,超级权限
    个人感觉,rootdbOwner用的比较多些。其它常用命令:
show users # 查看当前用户
db.changeUserPassword("user", "newpwd") # 修改密码
db.updateUser("user", {roles:[{role:"", db:""}]}) # 更新用户roles
db.grantRolesToUser("user", [{role:"", db:""}]) # 追加角色
db.revokeRolesFromUser("user", [{role:"", db:""}]) # 删除角色
db.dropUser("user") # 删除指定用户
db.dropAllUsers() # 删除当前数据下所有用户

集群配置keyFile

集群服务器使用密钥文件keyFile进行认证,创建用户后先生成密码文件:

openssl rand -base64 741 > /data/mongodb/keyfile/mongodb-keyfile # 生成密钥文件,注意改成自己的目录
chmod 600 /data/mongodb/keyfile/mongodb-keyfile # 必须给600权限
scp /data/mongodb/mongodb-keyfile worker1:/data/mongodb/keyfile/ # 分发
scp /data/mongodb/mongodb-keyfile worker2:/data/mongodb/keyfile/

然后修改配置文件mongod.conf,添加如下:

security:
  authorization: enabled
  clusterAuthMode: keyFile
  keyFile: /data/mongodb/keyfile/mongodb-keyfile
  javascriptEnabled: true

再修改数据目录的所有者:

chown -R mongod:mongod /data/mongodb

重启mongodb后登陆:

use admin  
db.auth("admin","admin")

好了,够用了。

你可能感兴趣的:(阿里云Linux CentOS安装MongoDB)