MongoDB基础

安装

参考Install MongoDB Community Edition

下载地址:https://www.mongodb.com/download-center/community

CentOS7安装MongoDB

安装

1
2
3
4
5
6
7
8
$ cd /usr/local
$ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.4.tgz
$ tar zxvf mongodb-linux-x86_64-rhel70-4.0.4.tgz
$ mv mongodb-linux-x86_64-4.0.4 mongodb
# 创建数据存储目录
$ mkdir -p /data-run/mongodb/data/db
# 创建日志文件
$ touch /data-run/mongodb/logs

配置配置文件

1
$ vi /etc/mongod.conf

内容如下:

1
2
3
4
5
dbpath=/data-run/mongodb/data/db
logpath=/data-run/mongodb/logs
fork=true
auth=true
bind_ip=0.0.0.0

添加环境变量

1
$ vi /etc/profile

末尾处添加

1
2
export MONGODB_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGODB_HOME/bin

重新加载环境变量

1
$ source /etc/profile

启动MongoDB

1
2
$ cd /usr/local/mongodb/bin
$ mongod -f /etc/mongod.conf

停止MongoDB

方法1

1
2
$ ps -axu |grep mongo
$ kill -2 进程id

方法2

1
2
$ ps -axu |grep mongo
$ kill -4 进程id

方法3

1
2
> use admin;
> db.shutdownServer();

Mac中安装MongoDB

安装

1
2
3
4
5
$ brew install mongodb
# Install the MongoDB Binaries with TLS/SSL Support
brew install mongodb --with-openssl
# Install the Latest Development Release of MongoDB
brew install mongodb --devel

启动

1
$ brew services start mongodb

Ubuntu中安装MongoDB

参考Install MongoDB Community Edition on Ubuntu

方法1

1
2
3
4
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
$ echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org

方法2

1
2
3
4
5
6
7
$ sudo apt-get install libcurl4 openssl
$ sudo wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1804-4.0.3.tgz
$ sudo tar zxvf mongodb-linux-x86_64-ubuntu1804-4.0.3.tgz
$ sudo mv mongodb-linux-x86_64-ubuntu1804-4.0.3 mongodb
## 添加环境变量
$ sudo vim ~/.bashrc
export PATH=<mongodb-install-directory>/bin:$PATH

配置管理

配置mongod.conf

1
$ sudo vi /etc/mongod.conf

内容如下:

1
2
3
4
5
6
port=27017
dbpath=/mongodb/data/db
logpath=/mongodb/logs
logappend=true
noauth=true
wiredTigerCacheSizeGB = 1

制作mongod.service

1
$ sudo vi /lib/systemd/system/mongod.service

内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Unit]
Description=MongoDB Database Service
Wants=network.target
After=network.target

[Service]
ExecStart=/usr/local/mongodb/bin/mongod --config /etc/mongod.conf
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
User=mongodb
Group=mongodb
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target

启动

1
$ sudo service mongod start

停止

1
$ sudo service mongod stop

重启

1
$ sudo service mongod restart

卸载

1
2
3
$ sudo apt-get purge mongodb-org*
$ sudo rm -r /var/log/mongodb
$ sudo rm -r /var/lib/mongodb

访问MongoDB

命令行访问

1
$ mongo --port 27017 -u "username" -p "password" --authenticationDatabase "admin"

图形界面访问

略。

运维

管理用户

创建管理员用户

1
2
3
4
5
6
7
$ mongo
> use admin
switched to db admin
> db.createUser({ user: "admin", pwd: "admin", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
# 验证是否创建成功,如果返回1,则表示成功。
> db.auth("admin", "admin")
> exit

创建dbOwner用户

该用户代表数据库所有者角色,拥有最高该数据库最高权限。比如新建索引等。

1
2
> use yourdatabase
> db.createUser({ user: "youruser", pwd: "yourpassword", roles: [{ role: "dbOwner", db: "yourdatabase" }] })

创建数据库读写账户

该用户用于该数据的读写,只拥有读写权限。

1
2
> use yourdatabase
> db.createUser({ user: "youruser2", pwd: "yourpassword2", roles: [{ role: "readWrite", db: "yourdatabase" }] })

配置开启验证

修改配置

1
2
3
4
# Mac版
$ vi /usr/local/etc/mongod.conf
# CentOS版
$ vi /etc/mongod.conf

增加如下配置

1
2
security:
authorization: enabled

重启MongoDB

1
$ mongod --auth

配置连接字符串

1
$ mongodb://username:password@localhost/database

导出

1
2
3
$ mongoexport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 -f 字段1,字段2 -o file --type json/csv
# 示例
$ ./mongoexport -h 127.0.0.1 -d dbname -c article -f title -o /usr/local/article.json --type json

导入

1
2
3
4
5
6
7
$ mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field
# 示例
$ ./mongoimport -d dbname -c article --file /usr/local/article.json --headerline --type json
$ ./mongoimport -d dbname -c article --file /usr/local/article.json --headerline --type json --upsert --drop
# 说明
--drop 导之前先删除
--upsert 存在更新,不存在插入。

备份

1
$ mongodump -h dbhost -d dbname -o 目录路径

还原

1
$ mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件存在路径

客户端

MongoDB Compass

Robo 3T

MongoChef现已更名为Studio 3T。

NoSQL Manager for MongoDB Professional

Toad

安装客户端

Ubuntu中安装Robo 3T

1
2
3
$ cd /usr/local
$ sudo wget https://download.robomongo.org/1.2.1/linux/robo3t-1.2.1-linux-x86_64-3e50a65.tar.gz
$ sudo tar -zxvf robo3t-1.2.1-linux-x86_64-3e50a65.tar.gz

进入安装目录,找到可执行文件,首先按住左键把它拖到桌面先不放开,然后按下Alt,此时出现一个菜单,选择“链接到此处”,松开之后就在桌面上创建好快捷方式。

可视化运维工具

MongoDB Cloud Manager

MongoDB Cloud Manager是官方推出的运维自动化管理系统,是企业版才支持的功能,社区用户也可以下载试用。Cloud Manager 主要功能包括

  • MongoDB 集群(复制集、分片)的自动化部署
  • 集群监控、及报警定制
  • 自动数据备份与还原

分片

概念

分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程。将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载。

角色

分片角色 作用 约束
配置服务器 是一个独立的mongod进程,保存集群和分片的元数据,即各分片包含了哪些数据的信息。最先开始建立,启用日志功能。
像启动普通的mongod一样启动配置服务器,指定configsvr选项。不需要太多的空间和资源,配置服务器的1KB空间相当于真是数据的200MB。
保存的只是数据的分布表。当服务不可用,则变成只读,无法分块、迁移数据。
配置服务器必须开启奇数个,入1个或则3个,开启2个则会报错。
路由服务器 即mongos,起到一个路由的功能,供程序连接。
本身不保存数据,在启动时从配置服务器加载集群信息,开启mongos进程需要知道配置服务器的地址,指定configdb选项。
-
分片服务器 是一个独立普通的mongod进程,保存数据信息。可以是一个副本集也可以是单独的一台服务器。 -

部署步骤

环境说明

  • 操作系统:CentOS7.2
  • 内核:4.15
角色 IP 主机名
配置服务器 192.168.1.91 node1
路由服务器 192.168.1.92 node2
分片服务器 192.168.1.93 node3
分片服务器 192.168.1.94 node4
分片服务器 192.168.1.95 node5

配置配置服务器

配置路由服务器

配置分片服务器

分片扩容

分片收缩

优化

常见问题

mongoexport导出csv中文乱码

notepad

编码 -> 转换为UTF-8 with BOM编码格式

sublime text

File -> save with Encoding -> UTF-8 with BOM

参考

坚持原创技术分享,您的支持将鼓励我继续创作!