mongodb数据库安装、备份
下载安装包
curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.13.tgz
解压
tar -zxvf mongodb-linux-x86_64-3.6.13.tgz
移动文件
mv mongodb-linux-x86_64-3.6.13/* /usr/local/mongodb
在足够硬盘空间下创建文件夹,用户存储数据和日志
mkdir -p /home/mongodata_new2/mongo
mkdir -p /home/mongodata_new2/logs
touch /home/mongodata_new2/logs/log.log
修改上述文件权限:
cd /home/mongodata_new2/
chmod 777 mongo
cd /home/mongodata_new2/logs
chmod 777 log.log
MongoDB配置用户名和密码
新建MongoDB服务:
/usr/local/mongodb/bin/mongod --port 27017 --dbpath=/home/mongodata_new2/mongo --logpath=/home/mongodata_new2/logs/log.log
开启MongoDB客户端shell:
/usr/local/mongodb/bin/mongo --port 27017
use admin
db.createUser(
{
user: "adminUser",
pwd: "adminPass",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
#授权root,否则连接后提示授权失败
db.grantRolesToUser( "adminUser" , [ { role: "root", db: "admin" } ])
管理员创建成功,现在拥有了用户管理员
用户名:adminUser
密码:adminPass
然后,断开 mongodb 连接, 关闭数据库
use admin
db.shutdownServer()
MongoDB用户验证登陆
启动带访问控制的 MongoDB
/usr/local/mongodb/bin/mongod --auth --port 27017 --dbpath=/home/mongodata_new2/mongo
客户端连接后,再进行验证
/usr/local/mongodb/bin/mongod --auth --port 27017 --dbpath=/home/mongodata/mongo --logpath=/home/mongodb/logs/log.log --bind_ip=172.16.0.66 --fork
/usr/local/mongodb/bin/mongod --repair --dbpath=/home/mongodata/mongo
/usr/local/mongodb/bin/mongo --port 27017
use admin
db.auth("adminUser", "adminPass")
#输出 1 表示验证成功
创建普通用户
过程类似创建管理员账户,只是 role 有所不同
use vmapdb
db.createUser(
{
user: "vmapdb",
pwd: "vmapdb1234",
roles: [ { role: "readWrite", db: "vmapdb" },
{ role: "read", db: "vmapdb" } ]
}
)
//如果需要创建新的数据库
use traffic_article_db
db.createUser(
{
user: "postgres",
pwd: "lnalt123",
roles: [ { role: "readWrite", db: "traffic_db" },
{ role: "read", db: "traffic_db" } ]
}
)
use vmapdb
db.auth("vmapdb", "vmapdb1234")
ctrl+c 最后关闭MongoDB服务。
配置MongoDB开机启动
新建/usr/local/mongodb/mongodb.conf,并输入以下内容 注意:bind_ip一定要设定为0.0.0.0
port=27017
dbpath=/home/mongodata_new2/mongo
logpath=/home/mongodata_new2/logs/log.log
fork=true
logappend=true
bind_ip=0.0.0.0
auth=true
在文件目录“/lib/systemd/system/mongodb.service”下,新建mongodb.service文件,并输入以下内容,保存
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongodb.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
然后设置mongodb.service权限
chmod 777 /lib/systemd/system/mongodb.service
开启
#启动服务
systemctl start mongodb.service
#停止服务
systemctl stop mongodb.service
#添加开机自启动
systemctl enable mongodb.service
#重启服务
systemctl restart mongodb.service
数据库备份、迁移
数据备份
cd /usr/local/mongodb/bin
./mongodump -h 127.0.0.1:27017 -d vmapdb -o /home/mongo_backup_files/mongodb_backup_20220214 -u=vmapdb -p=vmapdb1234
./mongodump -h 127.0.0.1:27017 -d traffic_maintenance -o /home/mongo_backup_files/mongodb_backup_20220330 -u=lngl -p=lngl2020
./mongodump -h 127.0.0.1:27017 -d vmapdb -o /home_vmapdbn/back -u=vmapdb -p=vmapdb1234
./mongodump -h 127.0.0.1:27017 -d vmapdb -u=vmapdb -p=vmapdb1234 --gzip --archive=/home/mongo_backup/20211105.archive
数据恢复
./mongorestore --host 127.0.0.1 --port 27017 -u vmapdb -p vmapdb1234 -d vmapdb --dir /home/mongodb_backup_20220219/vmapdb/ --drop
./mongorestore --host 127.0.0.1 --port 27017 -u lngl -p lngl2020 -d traffic_maintenance_temp --dir /home/mongo_backup_files/mongodb_backup_20220330/traffic_maintenance/ --drop
./mongorestore --host 127.0.0.1 --port 27017 -u vmapdb -p vmapdb1234 -d vmapdb --dir /home/mogodata_vis/vmapdb/ --drop
./mongorestore --host 127.0.0.1 --port 27017 -u vmapdb -p vmapdb1234 -d vmapdb --dir /home/mongo_backup/vmapdb-base/ --drop
./mongorestore --host 127.0.0.1 --port 27017 -u vmapdb -p vmapdb1234 -d vmapdb --dir /home/mongo_backup/data2/ --drop
./mongorestore --host 172.16.0.58 --port 27017 -d vmapdb --dir /home/mongo_backup/mongo_data_backup20201010/vmapdb/ --drop
./mongorestore --host 127.0.0.1 --port 27017 -u vmapdb -p vmapdb1234 -d vmapdb --gzip --archive=/home/database/20211105.archive --drop
./mongorestore --host 127.0.0.1 --port 27017 -u lanzhou -p lanzhou1234 -d lanzhou --dir /home/mongodata_frontimage/lanzhou/ --drop
其他问题
Too many open files 导致 MongoDB宕机的问题及解决方式
再一次业务中一个单节点MongoDB挂掉, 最开始看日志并没有提示错误信息, 找了半天没有发现到底是什么原因。
然后就直接重启,重启正常, 大概过了半天, 发现又挂掉了!!! 当时还是比较着急的,但是这次出现了日志 Too many open files。
有日志就好办了, 这是Linux的文件句柄限制最大打开文件为1024., 很显然在实际生产中是不能满足要求的, 这就需要对它默认值的更改了。
查看文件最大打开数量限制
ulimit -a
# 输出以下信息
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 1024 # 最大打开文件数
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 7168
virtual memory (kbytes, -v) unlimited
修改方式
1、临时改变 open file 值
ulimit -n 655350
可以满足当前登录 增大open file 值, 但是如果重新登录,或打开新的用户open file 值都会恢复默认
这样显然是不能满足要求的
2、永久修改open file 值
# 修改 /etc/security/limits.conf
# 添加以下代码
* soft nofile 655350
* hard nofile 655350
# 修改/etc/pam.d/login添加如下一行
session required /lib/security/pam_limits.so
可以通过 ulimit -a 查看是否修改成功。
即便如此,在市级平台的mongodb中,也出现了Too many open files的问题,这个时候只修改open files的值是无用的,还要按照以下步骤对系统中的其他参数进行调整。
# 修改/etc/systemd/system.conf
vim /etc/systemd/system.conf
# 在最后添加以下内容
DefaultLimitCORE=infinity
DefaultLimitNOFILE=100000
DefaultLimitNPROC=100000
#重启服务器
reboot
#重启mongodb
systemctl restart mongodb.service
MongoDB出现异常,因为挂载的分区存储不够了!
src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp 361
2019-06-16T04:54:54.830+0800 I - [thread2]
***aborting after fassert() failure
应该修改--dbpath=/home/mongodb/data/db 参数为空间可用的文件夹地址。
遇到数据导入等问题时,查看日志文件
cat /home/mongodb/logs/log.log