mongodb部署

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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容