解压方式安装mongodb
1下载地址
Download MongoDB Community Server | MongoDB
2.启动mongodb
2.1mongo用户启动
mongo不推荐使用root用户运行所以要新建低级用户
useradd mongo
2.2创建数据目录
mkdir /app/mongo/{conf,data,logs}
2.3配置环境变量
vim /etc/profile 追加内容
export PATH=$PATH:{安装路径}/bin
应用配置:source vim /etc/profile
2.4编辑配置文件
vim /app/mongo/conf/mongo.conf
systemLog:
destination: file
path: /app/mongo/logs/mongod.log # log path
logAppend: true
storage:
dbPath:/app/mongo/data # data directory
engine: wiredTiger #存储引擎
journal: #是否启用journal日志
enabled: true
net:
bindIp: 0.0.0.0
port: 28018 # port
processManagement:
fork: true
2.5命令启动mongo
mongod -f /app/mongo/conf/mongo.conf
2.6命令关闭mongo
mongod -f /app/mongo/conf/mongo.conf --shutdown
3.交由systemctl管理
3.1新建system管理服务配置文件
vim /usr/lib/systemd/system/mongodb.service
[Unit]
Description=mongo
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
User=mongo
Group=mongo
ExecStart=/app/mongo/mongodb-4.4.26/bin/mongod --config /app/mongo/mongodb-4.4.26/conf/mongo.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/app/mongo/mongodb-4.4.26/bin/mongod --shutdown /app/mongo/mongodb-4.4.26/conf/mongo.conf
PrivateTmp=true
3.2读取配置,启动
systemctl daemon-reload
systemctl start mongod
4.启动mongodb常见报错:
- 没有正常关闭导致的报错
这种报错就很难受,一般是由于没有正确关闭导致的报错,但是目录没有权限也是会报这种错误,可以根据日志文件的报错信息排查,如果真的时kill - 9 pid然后导致的报错,那么很有可能是数据库数据混乱了,可以尝试下面的解决办法,如果还是不行,那就有可能要恢复备份文件了,很坑,所以一定要注意,不要kill - 9 ,可以kill -15 也可以 mongod -f mongo.conf --shutdown关闭
解决方法:
1. 可以尝试删除data目录下 mongod.lock 文件
2. mongod --repair -f mongo.conf
注:--repair 修复数据库
需要注意的是,mongod --repair 命令会关闭 MongoDB 实例并对数据库文件进行修复,这个过程会耗费较长的时间并且会导致数据库不可用。因此,在生产环境中,建议尽量避免频繁的使用 mongod --repair 命令,而是应该在必要的时候才使用它
docker-compose安装mongodb
1.建目录:
mkdir {conf,data,log}
chmod 777 log
直接将log文件夹权限改为777
├── conf
├── data
├── log
├── init-scripts # 存放初始化脚本,可以初始化时帮助新建用户
├── docker-compose.yml
├── Dockerfile
2.配置mongod.conf文件
vim ./conf/mongod.conf
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
storage:
dbPath: /data/db
engine: wiredTiger
journal:
enabled: true
net:
bindIpAll: true
port: 27017
maxIncomingConnections: 10000
security:
authorization: enabled
可该参数:
- 修改systemLog.path字段指定MongoDB的日志文件路径
- 修改storage.dbPath字段指定MongoDB的数据文件路径
- 修改net.port字段指定MongoDB的端口号
- 修改security.authorization字段指定是否启用MongoDB的身份验证机制
3.编写初始化脚本(可以不yao)
vim ./init-scripts/init.js
要给init.js执行权限 chmod +x init.js
用于初始化MongoDB。可以写可以不写
脚本只会在第一次创建data目录的时候执行,除非将data删除创建,否则是无用的
db = db.getSiblingDB('newDB'); // 创建一个名为"newDB"的DB,getSiblingDB方法会进入这个库
db.createUser( // 创建一个名为"shon"的用户,设置密码和权限
{
user: "user1",
pwd: "user1",
roles: [
{ role: "dbOwner", db: "newDB"}
]
}
);
db.createCollection("newCollection"); // 在"newDB"中创建一个名为"newCollection"的Collection
## 以下脚本会创建一个newDB库并进入,创建五条测试数据
// 连接到指定的数据库
db = db.getSiblingDB('newDB');
db.createUser(
{
user: "user1",
pwd: "user1",
roles: [
{ role: "dbOwner", db: "newDB"}
]
}
);
// 向指定的集合中插入数据
db.info_table.insertMany([
{ name: "Alice", age: 30 },
{ name: "Bob", age: 25 },
{ name: "Charlie", age: 35 },
{ name: "David", age: 28 },
{ name: "Eve", age: 32 }
]);
4.编写Dockerfile文件
用于初始化Docker容器,将配置文件挂载进去
FROM mongo:4.4
# 创建存放配置文件和初始化脚本的目录
RUN mkdir -p /etc/mongo/conf
# 将本地的配置文件拷贝进容器
COPY conf/* /etc/mongo/conf/
# 将本地的setup.js映射到Docker容器中
COPY ./init-scripts/* /docker-entrypoint-initdb.d/
5.编写docker-compose配置文件
vim docker-compose.yml
version: "3"
services:
mongo-express:
image: mongo-express
restart: always
ports:
- 8889:8081
environment:
ME_CONFIG_MONGODB_SERVER: mongo4.4
ME_CONFIG_MONGODB_ADMINUSERNAME: admin
ME_CONFIG_MONGODB_ADMINPASSWORD: admin
ME_CONFIG_MONGODB_PORT: 27017
ME_CONFIG_BASICAUTH_USERNAME: admin #mongo-express的登录用户认证
ME_CONFIG_BASICAUTH_PASSWORD: admin
links:
- mongo
networks:
- mongo-compose-network
mongo:
build: ./
container_name: mongo4.4
restart: always
environment:
MONGO_INITDB_DATABASE: admin
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: admin
ports:
- 27017:27017
volumes:
- ./data:/data/db
- ./log:/var/log/mongodb
- ./conf:/etc/mongo/conf
- ./init-scripts:/docker-entrypoint-initdb.d/
command: mongod --config /etc/mongo/conf/mongo.conf
networks:
- mongo-compose-network
networks:
mongo-compose-network:
driver: bridge
6.常见问题:
docker启动mongo报错 Failed to open /var/log/mongodb/mongod.log
docker中mongo启动用户为mongodb用户,检查你的/var/log/mongodb/mongod.log文件的目录以及文件的权限,是否允许mongodb读写
mongo/conf/mongo.conf
networks:
- mongo-compose-network
networks:
mongo-compose-network:
driver: bridge
### 6.常见问题:
<u>docker启动mongo报错 `Failed to open /var/log/mongodb/mongod.log`</u>
>docker中mongo启动用户为mongodb用户,检查你的/var/log/mongodb/mongod.log文件的目录以及文件的权限,是否允许mongodb读写