運維助手Mongodb3.20搭建配置

配置yum源3。2 或3。4

vi /etc/yum。repos。d/mongodb-org-3。4。repo[mongodb-org-3。4] name=MongoDB Repository baseurl=https://repo。mongodb。org/yum/redhat/$releasever/mongodb-org/3。4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www。mongodb。org/static/pgp/server-3。4。asc###從阿里源下載vi /etc/yum。repos。d/mongodb-org-3。2。0。repo[mongodb-org]name=MongoDB Repositorybaseurl=http://mirrors。aliyun。com/mongodb/yum/redhat/7Server/mongodb-org/3。2/x86_64/gpgcheck=0enabled=1[MongoDB]name=MongoDB Repositorybaseurl=http://repo。mongodb。org/yum/redhat/$releasever/mongodb-org/4。0/x86_64/gpgcheck=0enabled=1

wget下載

wget https://mirrors。aliyun。com/mongodb/yum/redhat/7Server/mongodb-org/3。2/x86_64/RPMS/mongodb-org-3。2。2-1。el7。x86_64。rpmwget https://mirrors。aliyun。com/mongodb/yum/redhat/7Server/mongodb-org/3。2/x86_64/RPMS/mongodb-org-tools-3。2。20-1。el7。x86_64。rpmwget https://mirrors。aliyun。com/mongodb/yum/redhat/7Server/mongodb-org/3。2/x86_64/RPMS/mongodb-org-shell-3。2。20-1。el7。x86_64。rpmwget https://mirrors。aliyun。com/mongodb/yum/redhat/7Server/mongodb-org/3。2/x86_64/RPMS/mongodb-org-server-3。2。20-1。el7。x86_64。rpmwget https://mirrors。aliyun。com/mongodb/yum/redhat/7Server/mongodb-org/3。2/x86_64/RPMS/mongodb-org-mongos-3。2。20-1。el7。x86_64。rpm

安裝

rpm -ivh mongodb-org-3。2。20-1。el7。x86_64。rpm mongodb-org-server-3。2。20-1。el7。x86_64。rpm mongodb-org-tools-3。2。20-1。el7。x86_64。rpmmongodb-org-mongos-3。2。20-1。el7。x86_64。rpm mongodb-org-shell-3。2。20-1。el7。x86_64。rpm

安裝前yum update

安裝mongodbyum -y install mongodb-org mongodb-org-server

建立資料夾和許可權

mkdir -pv /app/mongodb/{logs,data}chown mongod:mongod /app/mongodb/*

修改配置在vi /etc/mongod。conf

systemLog: quiet: false path: /app/mongodb/logs/mongod。log #path: /var/log/mongodb/mongod。log logAppend: false destination: fileprocessManagement: fork: true #pidFilePath: /app/mongodb/logs/mongodb。pid pidFilePath: /var/run/mongodb/mongod。pidnet: bindIp: 127。0。0。1 port: 27099 maxIncomingConnections: 65536 wireObjectCheck: true ipv6: false storage: dbPath: /app/mongodb/data indexBuildRetry: true journal: enabled: true directoryPerDB: false engine: mmapv1 syncPeriodSecs: 60 mmapv1: quota: enforced: false maxFilesPerDB: 8 smallFiles: true journal: commitIntervalMs: 100 wiredTiger: engineConfig: cacheSizeGB: 8 journalCompressor: snappy directoryForIndexes: false collectionConfig: blockCompressor: snappy indexConfig: prefixCompression: trueoperationProfiling: slowOpThresholdMs: 100 mode: off

mongodb 3。2 使用者許可權管理配置

使用者許可權設定1、進入mongodb的shell : mongo2、切換資料庫: use admin從3。0 版本起,預設只有 local 庫,沒有admin 庫,需要我們自己來建立。3、新增使用者,指定使用者的角色和資料庫:

db。createUser(

{ user: “admin”,

customData:{description:“superuser”},

pwd: “admin”,

roles: [ { role: “userAdminAnyDatabase”, db: “admin” } ]

}

user欄位,為新使用者的名字;pwd欄位,使用者的密碼;cusomData欄位,為任意內容,例如可以為使用者全名介紹;roles欄位,指定使用者的角色,可以用一個空陣列給新使用者設定空角色。在roles欄位,可以指定內建角色和使用者定義的角色。

4、檢視建立的使用者 : show users 或 db。system。users。find()5、啟用使用者許可權:修改配置檔案,增加配置:security: authorization: enabled重新啟動mongodb

6、使用者驗證使用:啟用使用者驗證後,再次登入mongo shell ,執行 show dbs 等命令會提示“沒有許可權”。此時,需要使用者驗證登入。db。auth(“admin”,“admin”)

###建立普通使用者use foo;db。createUser({user: ‘foo’, pwd: ‘bar’, roles: [{role: ‘readWrite’, db: ‘foo’}]})db。auth(‘foo’, ‘bar’)

其他內建的角色資料庫使用者角色:read、readWrite;資料庫管理角色:dbAdmin、dbOwner、userAdmin;叢集管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;備份恢復角色:backup、restore;所有資料庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase超級使用者角色:root// 這裡還有幾個角色間接或直接提供了系統超級使用者的訪問(dbOwner 、userAdmin、userAdminAnyDatabase)內部角色:__system

配置檔案示例

#此處為配置檔案可配置的內容#Mongod config file #MongoDB configuration files use the YAML format。#The following example configuration file contains several mongod settings。#########Example Start#########systemLog:# destination: file# path: “/var/log/mongodb/mongodb。log”# logAppend: true#storage:# journal:# enabled: true#processManagement:# fork: true#net:# bindIp: 127。0。0。1# port: 27017#setParameter:# enableLocalhostAuthBypass: false#########Example End#################Core OptionssystemLog:# verbosity: 0 #Default: 0; 1 to 5 increases the verbosity level to include Debug messages。# quiet: # traceAllException: # syslogFacility: user path: “/usr/local/mongodb/log/mongod。log” logAppend: true# logRotate: #rename or reopen destination: file# timeStampFormat: iso8601-local# component:# accessControl:# verbosity: 0# command:# verbosity: 0# # COMMENT additional component verbosity settings omitted for brevity# storage:# verbosity: 0# journal:# verbosity: # write:# verbosity: 0##########ProcessManagement OptionsprocessManagement: fork: true pidFilePath: “/usr/local/mongodb/log/mongod。pid”###########Net Optionsnet: port: 27017# bindIp: #Default All interfaces。# maxIncomingConnections: 65536# wireObjectCheck: true# ipv6: false# unixDomainSocket:# enabled: true# pathPrefix: “/tmp”# filePermissions: 0700# http:# enabled: false# JSONPEnabled: false# RESTInterfaceEnabled: false# ssl:# sslOnNormalPorts: # deprecated since 2。6# mode: # PEMKeyFile: # PEMKeyPassword: # clusterFile: # clusterPassword: # CAFile: # CRLFile: # allowConnectionsWithoutCertificates: # allowInvalidCertificates: # allowInvalidHostnames: false# FIPSMode: ##########security Options#security:# keyFile: # clusterAuthMode: keyFile# authorization: disable# javascriptEnabled: true########security。sasl Options# sasl:# hostName: # serviceName: # saslauthdSocketPath: ###########setParameter OptionsetParameter: enableLocalhostAuthBypass: false# # ###########storage Optionsstorage: dbPath: “/data/db”# indexBuildRetry: true# repairPath: “/data/db/_tmp”# journal:# enabled: true# directoryPerDB: false# syncPeriodSecs: 60 engine: “mmapv1” #Valid options include mmapv1 and wiredTiger。#########storage。mmapv1 Options# mmapv1:# preallocDataFiles: true# nsSize: 16# quota:# enforced: false# maxFilesPerDB: 8# smallFiles: false# journal:# debugFlags: # commitIntervalMs: 100 # 100 or 30#########storage。wiredTiger Options# wiredTiger:# engineConfig:# cacheSizeGB: #Default: the maximum of half of physical RAM or 1 gigabyte# statisticsLogDelaySecs: 0# journalCompressor: “snappy”# directoryForIndexes: false# collectionConfig:# blockCompressor: “snappy”# indexConfig:# prefixCompression: true############operationProfiling Options#operationProfiling:# slowOpThresholdMs: 100# mode: “off”############replication Options#replication:# oplogSizeMB: # replSetName: # secondaryIndexPrefetch: all############sharding Options#sharding:# clusterRole: #configsvr or shardsvr# archiveMovedChunks: True###########auditLog Options#auditLog:# destination: #syslog/console/file# format: #JSON/BSON# path: # filter: ###########snmp Options#snmp:# subagent: # master: ##########mongos-only Options#replication:# localPingThresholdMs: 15##sharding:# autoSplit: true# configDB: # chunkSize: 64##########Windows Service Options#processManagement:# windowsService:# serviceName: # displayName: # description: # serviceUser: # servicePassword:

修改啟動服務

[Unit]Description=High-performance, schema-free document-oriented databaseAfter=network。targetDocumentation=https://docs。mongodb。org/manual[Service]User=mongodGroup=mongodEnvironment=“OPTIONS=-f /etc/mongod。conf”ExecStart=/usr/bin/mongod $OPTIONSExecStartPre=/usr/bin/mkdir -p /var/run/mongodbExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodbExecStartPre=/usr/bin/chmod 0755 /var/run/mongodbPermissionsStartOnly=true#PIDFile=/app/mongodb/logs/mongod。pidPIDFile=/var/run/mongodb/mongod。pidType=forking# file sizeLimitFSIZE=infinity# cpu timeLimitCPU=infinity# virtual memory sizeLimitAS=infinity# open filesLimitNOFILE=64000# processes/threadsLimitNPROC=64000# locked memoryLimitMEMLOCK=infinity# total threads (user+kernel)TasksMax=infinityTasksAccounting=false# Recommended limits for for mongod as specified in# http://docs。mongodb。org/manual/reference/ulimit/#recommended-settings[Install]WantedBy=multi-user。target

建立連結

ln -s /usr/lib/systemd/system/mongod。service /etc/systemd/system/multi-user。target。wants/

重新載入systemctl

systemctl daemon-reload

啟動服務

sudo chkconfig mongod on sudo service mongod start sudo service mongod stopsudo service mongod restart netstat -tunpl | grep 27017

使用說明

###連線mongodbmongo檢視資料show dbs切換資料庫,沒有建立use new檢視collectionshow collectionsshow tables檢視當前資料庫狀態db。stats()插入資料db。user。insert({“username”:“test1”,“age”:12,“sex”:“m”})查詢資料,查詢集合中所有資料 db。user。find()指定條件查詢資料db。user。find({age: {$gt: 10}});db。user。find({sex: /m/});統計資料db。user。count()指定條件統計資料db。user。count({sex: “m”});刪除記錄db。user。remove({age: 12});刪除collectiondb。user。drop()複製資料庫db。copyDatabase(“new2”, “new3”, “127。0。0。1”); 刪除當前資料庫 db。dropDatabase();釋放空間db。repairDatabase()停止mongodbuse admindb。shutdownServer()幫助檔案helpdb。help()

備份資料庫

mongodump -h 127。0。0。1:27017 -o /data/tmp/mongodb/

還原資料庫

mongorestore -h 127。0。0。1:27017 -d 資料庫 /app/mongodb/tmpdata/還原資料庫 ——drop

同步資料例項mongosync

mongosync 使用者手冊 1。6。0簡介mongosync 是 mongodb 資料同步工具,目前已支援絕大多種資料同步。許可證According to MongoDB tools licenses。We use apache license right now :http://www。apache。org/licenses/LICENSE-2。0舉例source: 10。0。4。91:27017target: 10。0。4。91:27020全量同步mongosync -h 10。0。4。91:27017 -u admin -p 123 ——to 10。0。4。91:27020 ——tu admin ——tp456增量同步mongosync -h 10。0。4。91:27017 -u admin -p 123 ——to 10。0。4。91:27020 ——tu admin ——tp456 ——oplog -s 1369406664,1全量和增量同步,實時同步mongosync -h 10。0。4。91:27017 -u admin -p 123 ——to 10。0。4。91:27020 ——tu admin ——tp456 ——oplog 按時間段同步mongosync -h 10。0。4。91:27017 -u admin -p

解除安裝mongodb

停止服務sudo service mongod stop移除包sudo yum erase $(rpm -qa | grep mongodb-org)移除資料和日誌檔案sudo rm -r /var/log/mongodb sudo rm -r /var/lib/mongo

相關說明

processManagement。fork: true 以daemon模式啟動mongodnet。bindIp: 指定IP,逗號分隔,註釋掉的情況下,服務啟動在0。0。0。0systemLog。quiet: true 日誌輸出使用quiet模式,只輸出criticalstorage。dbPath: 指定資料的存放位置replication。replSetName: 副本集的名字security。authorization: enabled 使用認證security。keyFile: 使用keyFileverbosity: 日誌開啟debug模式,0-5operationProfiling。slowOpThresholdMs: slowlog設定,預設100net。http。RESTInterfaceEnabled: rest介面是否有效net。maxIncomingConnections: 最大連線數,預設65536,不能超過系統設定,# ulimit -n

環境

作業系統: Centos 7

mongodb備份shell指令碼

#!/bin/sh# dump 命令執行路徑,根據mongodb安裝路徑而定DUMP=/usr/bin/mongodump# 臨時備份路徑OUT_DIR=/data/backup/mongod_bak/mongod_bak_now# 壓縮後的備份存放路徑TAR_DIR=/app/backup/mongod_bak/mongod_bak_list# 當前系統時間DATE=`date +%Y-%m-%d`# 資料庫賬號#DB_USER=admin# 資料庫密碼#DB_PASS=Dinw^0#(77E)wt[V# 代表刪除7天前的備份,即只保留近 7 天的備份DAYS=7# 最終儲存的資料庫備份檔案TAR_BAK=“mongod_bak_$DATE。tar。gz”cd $OUT_DIRrm -rf $OUT_DIR/*mkdir -p $OUT_DIR/$DATE$DUMP -h 127。0。0。1:27017 -d 資料庫 -o $OUT_DIR/$DATE# 壓縮格式為 。tar。gz 格式tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE# 刪除 15 天前的備份檔案find $TAR_DIR/ -mtime +$DAYS -deleteexit

二、建立對應的備份目錄

mkdir -p /appapp/backup/mongodb_bak/mongodb_bak_nowmkdir -p /app/backup/mongodb_bak/mongodb_bak_list

三、修改檔案屬性,使其可執行

chmod +x MongoDB_bak。sh

四、新增到計劃任務

cron服務是Linux的內建服務,但它不會開機自動啟動。可以用以下命令啟動和停止服務:

/sbin/service crond start/sbin/service crond stop/sbin/service crond restart/sbin/service crond reload

以上1-4行分別為啟動、停止、重啟服務和重新載入配置。

要把cron設為在開機的時候自動啟動,在 /etc/rc。d/rc。local 指令碼中加入 /sbin/service crond start 即可

檢視當前使用者的crontab,輸入 crontab -l;

編輯crontab,輸入 crontab -e;

刪除crontab,輸入 crontab -r

1 進入編輯介面

crontab -e

2 新增任務

30 18 * * * /home/crontab/mongobk。sh

基本格式 :

*command分時日月周命令第1列表示分鐘1~59 每分鐘用或者 /1表示第2列表示小時1~23(0表示0點)第3列表示日期1~31第4列表示月份1~12第5列標識號星期0~6(0表示星期天)

3 儲存後退出,啟動服務

service crond start

4 設定開機自啟動

chkconfig crond on