https://github.com/mongodb/homebrew-brew
1、brew tap 安装 mongodb/brew 源
brew tap mongodb/brew
2、安装最新 mongodb 社区版 brew install mongodb-community
或者指定版本安装 brew install mongodb-community@4.4
Intel Mac 安装目录 /usr/local/Cellar/mongodb-community/4.4.5
M1 Mac 安装目录 /opt/homebrew/Cellar/mongodb-community/5.0.6
M1 Mac 安装目录 /opt/homebrew/Cellar/mongodb-community/6.0.1
使用 brew services 启动并添加开机启动:
brew services start mongodb-community
前台启动
Intel 版 Mongo mongod --config /usr/local/etc/mongod.conf
M1 版 Mongo mongod --config /opt/homebrew/etc/mongod.conf
登录 Mongo
5.0 及之前,安装 Mongo 时会自动安装 mongo 命令行,启动 mongodb-community 服务后直接运行 mongo 命令即可登录 localhost:27017
6.0 开始,官方用 mongosh 代替 mongo 命令行,安装 Mongo 6.0 后也不再有 mongo 命令,而是会安装 /opt/homebrew/Cellar/mongosh/1.6.0,启动 mongodb-community 服务后直接运行 mongosh 命令即可登录 localhost:27017
https://www.mongodb.com/docs/manual/release-notes/6.0-compatibility/
mongosh
Current Mongosh Log ID: 637ddc86ac2620380ae3baeb
Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.6.0
Using MongoDB: 6.0.1
Using Mongosh: 1.6.0
For mongosh info see: https://docs.mongodb.com/mongodb-shell/
https://segmentfault.com/a/1190000006236494
https://www.mongodb.com/docs/database-tools/mongodump/
mongodump 可从 mongos 或 mongod 导出数据
mongodump -h ip --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径
--authenticationDatabase admin 如果开启了认证,必须指定认证数据库,否则报错:
2022-06-12T03:07:41.845+0000 could not connect to server: connection() error occured during connection handshake: auth error: sasl conversation error: unable to authenticate using mechanism “SCRAM-SHA-1”: (AuthenticationFailed) Authentication failed.
注意: mongodump 和 mongoexport 导出的数据库、表不包含索引,使用 mongorestore/mongoimport 导入后需要重建索引
$ mongodump -h localhost --port 27017 -u root -p passwd --authenticationDatabase admin -d users -o /opt/bitnami/mongodb/
2022-06-14T01:59:48.283+0000 writing users.user to /opt/bitnami/mongodb/users/user.bson
2022-06-14T01:59:51.248+0000 [#.......................] users.user 7802/111808 (7.0%)
2022-06-14T01:59:54.248+0000 [#######.................] users.user 34752/111808 (31.1%)
2022-06-14T01:59:56.410+0000 [########################] users.user 111808/111808 (100.0%)
2022-06-14T01:59:56.410+0000 done dumping users.user (111808 documents)
会在输出目录中生成 users 目录,里面有各个 collection 的数据和元数据信息
464M user.bson
4.0K user.metadata.json
注意最后的输出目录不要写根目录/,会提示无权限
2022-06-14T01:57:44.964+0000 Failed: error dumping metadata: error creating directory for metadata file /users: mkdir /users: permission denied
https://www.mongodb.com/docs/database-tools/mongorestore/
mongorestore -h ip --port 端口 -u 用户名 -p 密码 -d 数据库 文件存在路径
--authenticationDatabase admin 如果开启了认证,必须指定认证数据库
mongorestore -h localhost --port 27017 -u root -p passwd --authenticationDatabase admin -d users /opt/bitnami/mongodb/users
https://www.mongodb.com/docs/database-tools/mongoexport/
mongoexport -h ip --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 -o 文件名
--authenticationDatabase admin 如果开启了认证,必须指定认证数据库
此外还支持下面的高级选项:
-f 指定导出字段,以字号分割,-f name,email,age 表示导出 name,email,age 这三个字段
-q 可以根查询条件导出, -q ‘{ “_id” : “10001” }’ 导出 uid 为 100 的数据
--csv 表示导出的文件格式为 csv 的
例如分别导出 chunks 和 files 表
mongoexport -h localhost --port 27017 -u root -p passwd --authenticationDatabase admin -d image-storage -c img_collection_20220623.chunks -o /opt/bitnami/mongodb/face-chunks.dat
mongoexport -h localhost --port 27017 -u root -p passwd --authenticationDatabase admin -d image-storage -c img_collection_20220623.files -o /opt/bitnami/mongodb/face-files.dat
大collection导出有进度
2022-06-12T03:16:50.654+0000 connected to: mongodb://localhost:27017/
2022-06-12T03:16:51.655+0000 [……………………] image-storage.img_collection_20220623.chunks 0/13674 (0.0%)
2022-06-12T03:17:01.654+0000 [##############……….] image-storage.img_collection_20220623.chunks 8000/13674 (58.5%)
2022-06-12T03:17:08.139+0000 [########################] image-storage.img_collection_20220623.chunks 13674/13674 (100.0%)
2022-06-12T03:17:08.139+0000 exported 13674 records
https://www.mongodb.com/docs/database-tools/mongoimport/
mongoimport -h ip --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 --upsert --drop 文件名
--authenticationDatabase admin 如果开启了认证,必须指定认证数据库
--upsert 插入或者更新现有数据
mongoimport -h localhost –port 27017 -u root -p passwd –authenticationDatabase admin -d image-storage -c img_collection_20220623.files –upsert /opt/bitnami/mongodb/face-files.dat
mongoimport -h localhost –port 27017 -u root -p passwd –authenticationDatabase admin -d image-storage -c img_collection_20220623.chunks –upsert /opt/bitnami/mongodb/face-chunks.dat
数据量大时导入有进度
2022-06-12T04:40:12.071+0000 connected to: mongodb://localhost:27017/
2022-06-12T04:40:15.072+0000 [#…………………..] image-storage.img_collection_20220623.chunks 188MB/2.38GB (7.7%)
2022-06-12T04:42:27.072+0000 [###############………] image-storage.img_collection_20220623.chunks 1.58GB/2.38GB (66.2%)
2022-06-12T04:43:06.302+0000 [########################] image-storage.img_collection_20220623.chunks 2.38GB/2.38GB (100.0%)
2022-06-12T04:43:06.302+0000 13674 document(s) imported successfully. 0 document(s) failed to import.
https://www.mongodb.com/docs/manual/reference/mongo/
MongoDB 5.0 开始用 mongosh 代替 mongo shell,包括如下改进:
命令行历史记录
新的 mongosh 可以向前兼容多数 mongo shell 命令,语法保持不变。
https://docs.mongodb.com/manual/reference/method/js-database/
https://docs.mongodb.com/manual/reference/method/db.adminCommand/#mongodb-method-db.adminCommand
https://docs.mongodb.com/manual/reference/command/renameCollection/
https://www.mongodb.com/docs/manual/reference/method/db.getCollectionNames/
https://www.mongodb.com/docs/manual/reference/method/db.stats/
先 use 切换数据库,然后执行 db.stats() 查看数据库使用量
collections:当前collection个数
objects:当前数据库所有collection数据条数
dataSize:所有数据的总大小,单位 bytes
storageSize:所有数据占的磁盘大小
indexes:索引数
indexSize:索引大小
scaleFactor:数据量单位缩放因子,默认为1,以字节返回大小的数据。要以KB 单位,指定scale值1024
mongos> db.stats();
"raw" : {
"mongodb-shard-0/mongodb-shard0-data-0.mongodb-headless.default.svc.cluster.local:27017,mongodb-shard0-data-1.mongodb-headless.default.svc.cluster.local:27017,mongodb-shard0-arbiter-0.mongodb-headless.default.svc.cluster.local:27017" : {
"db" : "storage",
"collections" : 46,
"views" : 0,
"objects" : 747853,
"avgObjSize" : 135104.86402809108,
"dataSize" : 101038577878,
"storageSize" : 101909536768,
"indexes" : 114,
"indexSize" : 53190656,
"totalSize" : 101962727424,
"scaleFactor" : 1,
"fsUsedSize" : 429770670080,
"fsTotalSize" : 984367513600,
"ok" : 1
"objects" : 747853,
"avgObjSize" : 135104,
"dataSize" : 101038577878,
"storageSize" : 101909536768,
"totalSize" : 101962727424,
"indexes" : 114,
"indexSize" : 53190656,
"scaleFactor" : 1,
"fileSize" : 0,
"ok" : 1,
"operationTime" : Timestamp(1655292494, 20),
"$clusterTime" : {
"clusterTime" : Timestamp(1655292496, 1),
"signature" : {
"hash" : BinData(0,"2NmKAmyTrRr94GZVMah2cPIHsq0="),
"keyId" : NumberLong("7105939909952667671")
https://www.mongodb.com/docs/manual/reference/method/db.currentOp/
查看当前正在进行的 mongo 操作,类似 MySQL 的 show processlist
secs_running 操作持续时间(秒),等于当前时间减去操作开始时间
microsecs_running 操作持续时间(微秒)
active 操作是否开启,空连接或内部空闲线程是非活跃的
op 操作类型,比如 insert, update, query, remove
ns 操作的db和collection名,格式 <database>.<collection>
https://docs.mongodb.com/manual/reference/method/js-collection/
https://www.mongodb.com/docs/manual/reference/method/db.collection.dataSize/
返回为 collection 分配的空间大小,包括未使用的空间,是数据压缩前的大小,单位 bytes
mongos> db.20220615.chunks.dataSize();
2026475991
https://www.mongodb.com/docs/manual/reference/method/db.collection.storageSize/
如果压缩了集合数据,则存储大小反映了压缩后的大小,可能小于 dataSize(),单位 bytes
或者 db.getCollection("aaa").storageSize()
例1,查看集合 20220615.chunks 的大小
mongos> db.20220615.chunks.storageSize();
2052100096
例2,数字开头的 collection 名需要使用 getCollection(“”) 方法,否则报语法错误
mongos> db.'20221116.chunks'.storageSize()
uncaught exception: SyntaxError: missing name after . operator :
@(shell):1:3
mongos> db.getCollection("20221116.chunks").storageSize();
286720
Numeric collection name
https://jira.mongodb.org/browse/SERVER-29953
https://www.mongodb.com/docs/manual/reference/method/db.collection.totalIndexSize/
集合的索引大小
mongos> db.20220615.chunks.totalIndexSize() ;
933888
https://www.mongodb.com/docs/manual/reference/method/db.collection.totalSize/
数据 + 索引大小,单位 bytes,等于 storageSize() + totalIndexSize()
mongos> db.20220615.chunks.totalSize();
2053033984
https://www.mongodb.com/docs/manual/reference/method/db.collection.stats/
https://docs.mongodb.com/manual/reference/method/db.collection.aggregate/
https://segmentfault.com/a/1190000020056997
https://docs.mongodb.com/manual/reference/method/js-replication/
https://docs.mongodb.com/manual/reference/method/rs.status/#mongodb-method-rs.status
> rs.status();
"ok" : 0,
"errmsg" : "not running with --replSet",
"code" : 76,
"codeName" : "NoReplicationEnabled"
https://docs.mongodb.com/manual/reference/method/js-sharding/
https://docs.mongodb.com/manual/reference/method/sh.status/#mongodb-method-sh.status
打印 sharding 配置和 chunks 信息,需要在 mongos 上执行。
在非 mongos 上执行时提示:
> sh.status();
printShardingStatus: this db does not have sharding enabled. be sure you are connecting to a mongos from the shell and not to a mongod.
- 简介
- MongoDB 与 Redis 比较
- MongoDB 与关系数据库术语对比
- 场景
- 适用场景
- 不适用场景
- 选型决策
- 场景举例
- MongoDB 数据类型
- 磁盘空间
- 内存
- MongoDB 如何使用内存
- 如何强行收回内存
- wiredTigerCacheSizeGB
- 索引
- db.col.getIndexes() 查看索引
- db.col.totalIndexSize() 查看索引大小
- db.col.dropIndexes() 删除所有索引
- db.col.dropIndex(“idx_name”) 删除指定索引
- db.col.createIndex() 创建索引
- TTL索引设置数据生存时间
- 指定一段时间后过期
- 指定过期时间点
- Mongo 复制集
- 心跳检测
- 成员角色
- Primary
- Secondary
- Arbiter
- Priority0
- Vote0
- Hidden 隐藏节点
- Delayed 延迟节点
- Primary选举
- Mongo Sharding Cluster 分片集群
- 分片集群架构
- mongos
- Config Server
- shard
- 分片策略
- 片键shard key
- 范围分片(range)
- 哈希分片(hash)
- chunk
- chunk size选择
- chunk分裂与迁移
- MongoDB 分片集群 Balance 机制
- 为什么需要 Balance?
- 谁来做 Balance?
- Balance 流程
- 获取chunk分布信息
- 根据TagRange分裂Chunk
- 生成待迁移的列表信息
- 执行迁移
- Balance 相关命令
- sh.isBalancerRunning() 查看Balance是否运行中
- sh.getBalancerState() 查看Balance是否开启
- sh.enableBalancing() 开启Balance
- sh.disableBalancing() 禁用Balance
- sh.startBalancer() 启动 Balancer
- sh.stopBalancer() 停止Balancer
- 设置balancer开启的时间窗口
- mongos
- MongoDB 开启认证
- 创建管理员账户
- 创建普通账户
- 重启Mongo开启认证
- 登录Mongo后通过 db.auth() 认证
- 带认证信息登录mongo
- 未开启认证的mongo带密码无法登录
- Mongo Profiler 慢查询记录
- 开启 Profiler 记录
- 查看慢查询日志
- Intel/M1 Mac Brew 安装 MongoDB Community
- 启动/停止mongodb
- 启动MongoDB
- 停止MongoDB
- mongo 连接
- mongo 连接本地27017端口(5.0及之前)
- mongosh 连接本地27017端口(6.0及之后)
- mongo –host host –port port 连接指定host上的mongo
- mongo host:port 连接指定host端口
- mongo host:port/db 指定host端口数据库连接
- mongo host:port/db -u u -p p 指定账号密码连接
- mongostat
- MongoDB 数据导入导出
- mongodump 导出数据库
- mongorestore 导入数据库
- mongoexport 导出collection数据
- mongoimport 导入collection数据
- 导出的数据库和collection会丢失原有索引和分片信息
- Mongo查看版本号
- mongo –version(未连接时)
- db.version() 已连接时
- mongo shell(4.x及之前) 和 mongosh(5.0)
- Database Methods 数据库命令
- 查看所有账号信息
- db.adminCommand() 执行admin数据库命令
- 迁移collection
- show dbs 查看数据库及大小
- use db 切换/创建数据库
- db 查看当前数据库
- show collections 查看当前库中的集合列表
- show tables 查看当前库中的集合列表
- db.getCollectionNames() 返回集合列表
- db.stats() 查看使用量统计
- db.dropDatabase() 删除db
- db.getCollection(‘col’) 返回collection
- db.createCollection(name, options) 创建集合
- db.currentOp() 查看正在执行的连接
- 查询执行时间超过1秒的慢查询操作
- Collection Methods 集合命令
- db.col.drop() 删除集合
- 批量删除collection脚本
- db.col.renameCollection() 集合重命名
- db.col.insert() 插入文档
- db.col.save() 插入或更新文档
- db.col.insertMany() 批量插入数据
- db.col.find() 文档查询
- 条件查询
- json嵌套查询
- sort() 排序
- limit() 指定返回结果数
- skip() 指定偏移量
- count() 计数
- db.col.count() 查看集合中的文档数
- db.col.dataSize() 集合的数据大小(bytes)
- db.col.storageSize() 集合的存储大小(bytes)
- db.col.totalIndexSize() 集合的索引大小(bytes)
- db.col.totalSize() 数据+索引大小(bytes)
- db.col.stats() 集合的统计信息
- db.col.deleteMany() 条件删除
- db.col.remove() 条件删除
- db.col.aggregate() 聚合查询
- 文档重复查询及删除
- Replication Methods 复制集命令
- rs.status() 查看复制集状态
- rs.printReplicationInfo()
- Sharding Methods 分片命令
- sh.status() 查看分片集群状态
- MongoDB时间少8小时