今天公司需要把 mongodb 數(shù)據(jù)庫遷移到另外一臺服務(wù)器上,剛好之前也沒系統(tǒng)的操作過一遍,所以今天就記錄下自己操作的這個流程。
系統(tǒng): Ubuntu 14.04 lts
mongodb版本:無要求,故最新版(v4.0.4)
1. 安裝 mongodb
之前都是下載 deb 文件,然后解壓安裝的。今天試試通過軟件源的方式去安裝。官網(wǎng)地址
- 向系統(tǒng)的包管理器導(dǎo)入其使用的公鑰
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
- 為 mongodb 創(chuàng)建資源文件
# 創(chuàng)建在 /etc/apt/sources.list.d 目錄下
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
- 重新加載本地包數(shù)據(jù)庫
sudo apt-get update
- 下載 mongodb 包
# apt-get 獲取的是最新版本的 mongodb ,并不能指定固定版本的 mongodb
sudo apt-get install -y mongodb-org
2. 啟動 mongodb
啟動 mongodb 之前,建議先修改它的配置文件,配置文件一般是 /etc/mongodb.conf
# 默認(rèn)的配置文件內(nèi)容
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
#security:
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:
做了以下這些修改
- 數(shù)據(jù)庫存儲位置。
/var/lib/mongodb存放到/data/db(需要先創(chuàng)建好 mkdir -p /data/db ) - 修改能連接數(shù)據(jù)庫的IP。
bindIp由 127.0.0.1 修改為 0.0.0.0 (所以Ip都能連接,也可以設(shè)置為需要連接到該數(shù)據(jù)庫的 IP) - 啟動安全驗(yàn)證。
下面是我修改后的配置文件
# mongodb.conf
storage:
dbPath: /data/db
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
net:
port: 27018
bindIp: 0.0.0.0
processManagement:
timeZoneInfo: /usr/share/zoneinfo
security:
authorization: enabled
啟動 mongodb 的方式有很多種,我選擇自己命名一個別名去啟動它。以后啟動就不需要再輸入一大串命令,或者查詢命令歷史去啟動
# 1. 添加以下命令到 .bashrc
alias mongod_start='/usr/bin/mongod --fork --auth --config=/etc/mongod.conf'
# 2. 讓文件生效
source ~/.bashrc
# 3. 命令啟動
mongod_start
如果不想通過這種方式啟動,那可以直接執(zhí)行 mongod --fork --auth --config=/etc/mongod.conf 去啟動。
輸入 mongo --port 27018,如果沒報錯什么的,那就說明成功啟動了 mongodb。
ps: 由于之前的文件里面修改了端口號,所以需要指定端口號,否則連接不上
既然說了啟動,那就說下正常的關(guān)閉 mongodb 的方式吧。當(dāng)然也可以查詢端口,殺進(jìn)程的方式去關(guān)閉 mongodb
> use admin;
> db.shutdownServer();
3. 創(chuàng)建用戶
在之前連接上 mongodb 的那個窗口,進(jìn)行處理
# 切換數(shù)據(jù)庫,這個是 默認(rèn)庫
use admin;
# 創(chuàng)建這個數(shù)據(jù)庫下的管理員
db.createUser({
user: "admin",
pwd: "admin",
roles: [{
role: "userAdminAnyDatabase",
db: "admin"
}]
})
# 斷開連接
exit
# 以 admin 用戶登陸來進(jìn)行操作
mongo --port 53082 -u admin -p admin --authenticationDatabase "admin"
# 創(chuàng)建你需要的數(shù)據(jù)庫
use test;
# 創(chuàng)建這個數(shù)據(jù)庫的管理員(可選)
db.createUser({
user: "testuser",
pwd: "passwd",
roles: [
{role: "userAdmin", db: "test"}
]
})
# 創(chuàng)建這個數(shù)據(jù)庫下的普通用戶,可以設(shè)置它的權(quán)限。下面創(chuàng)建的這個用戶擁有讀寫(readWrite)權(quán)限
db.createUser({
user: "putonguser",
pwd: "passwd",
roles: [
{role: "readWrite", db: "test"}
]
})
# 以普通用戶連接 mongodb
mongo --port 53082 -u putonguser -p passwd --authenticationDatabase "test"
4. 數(shù)據(jù)庫的備份和還原
在原先服務(wù)器上備份(需要暫停服務(wù)的暫停服務(wù)),注意修改成數(shù)據(jù)庫用戶的正確端口和用戶以及登陸密碼
# 退出連接
exit;
# 開始備份
mongodump -h localhost --port 27018 -d test -u putonguser -p passwd -o .
# 壓縮(對應(yīng)的文件)
tar -zcvf test.tgz ./test
# 傳輸?shù)降诙_服務(wù)器上
scp -r test.tgz username@host:/remote/directory
在新的服務(wù)器上解壓,并還原到指定的數(shù)據(jù)庫中
# 解壓
tar -xf test.tgz test
# 還原到指定(test)數(shù)據(jù)庫
mongorestore -h localhost -d test --dir ./test --port 27018 -u putonguser -p passwd --authenticationDatabase "test"
然后查詢下數(shù)據(jù)庫,看看數(shù)據(jù)是否是正常的。