MongoDB,版本5、6.02、7.02适用
记录两种使用MongoDB的方法,本地安装包和docker
本地安装包方法:Mac M1安装MongoDB6、后台运行
Docker Mongo
一、docker运行MongoDB,并设置用户名密码
可以在创建容器的时候指定root用户名密码(加上参数MONGO_INITDB_ROOT_USERNAME、MONGO_INITDB_ROOT_PASSWORD)
也可以在容器运行后,进入容器连接数据库使用mongoshell创建用户
注意执行命令的路径!可以新建一个文件夹,mkdir mongodb7,用来映射config和db文件。
目前最新版本是7.0.2
#为了命令行看起来更清晰,加了换行符\,注意格式,\后面不能有空格
docker run \
--name mongodb7 \
-p 27017:27017 \
-v $PWD/mongodb/configdb:/data/configdb/ \
-v $PWD/mongodb/data/db/:/data/db/ \
-e MONGO_INITDB_ROOT_USERNAME=root \
-e MONGO_INITDB_ROOT_PASSWORD=password \
-d mongo \
--auth
#进入mongo容器
docker exec -it mongodb7 /bin/bash
二、按需编辑配置
如果要编辑配置,比如bindIp,需要新建一个mongod.conf配置文件,MongoDB 容器在启动时会自动生成一个默认的配置文件,并将其命名为 /etc/mongod.conf.orig,我们可以复制它再编辑
#docker 镜像中没有vim,安装vim
apt-get update -y
apt-get install vim
#复制默认配置
cp /etc/mongod.conf.orig /etc/mongod.conf
vi /etc/mongod.conf
#修改后重启容器
三、容器内连接数据库
进入docker容器输入mongo,连接到数据库
旧版本命令是mongo,新版本用mongosh
mongosh
默认数据库是test
如果在第一步docker指令中已经设置了用户名和密码,可以验证一下用户名密码,再执行其他操作
db.auth(“root”,“password”)
没有auth就会报错要求身份认证
然后创建admin用户,以后使用uri连接要加上用户名和密码,比如比如mongodb://root:password@localhost:27017/
数据库软件可以用mongo官方的compass(免费),jet的datagrip,navicat最新版本也支持mongodb
如果没有在docker指令中指定root用户密码,可以创建一个
show dbs
#切换到admin数据库
use admin
#新建用户
db.createUser({user: "root",pwd: "password",roles: [ { role: "root", db: "admin" } ]})
#身份验证
db.auth("root","password")
如果在其他应用中使用uri连接数据库,比如mongodb://root:password@localhost:27017/database-name?authSource=admin
要注意连接的数据库有没有对应的用户,确认在哪个数据库建的用户。在默认情况下,MongoDB会将用户凭据存储在admin数据库中
四、导出、恢复数据库
需要用到导出、恢复,mongo数据库工具在这里下载
https://www.mongodb.com/try/download/database-tools
(笔者在恢复过程遇到了点问题用旧版本mongodb-database-tools-100.6.1-1解决了,记录一下)
1、恢复数据库
和连接数据库的uri一样也要注意用户凭据存在哪个数据库,下面的指令 目标数据库不存在的话会自动创建,–dir指定备份文件所在文件夹,–db指定恢复到哪个数据库。如果是密钥登陆,就使用–sslCAFile ./pem文件路径。到bin文件夹执行mongorestore程序。
./mongorestore --host localhost:27017 \
--dir ./database-backup --db database-name \
--username root --password password \
--authenticationDatabase=admin
2、导出数据库
–out指定输出的路径,不存在文件夹会自动创建
./mongodump --host localhost:27017 \
--out ./output --db database-name \
--username root --password password \
--authenticationDatabase=admin