今天公司需要把 mongodb 数据库迁移到另外一台服务器上,刚好之前也没系统的操作过一遍,所以今天就记录下自己操作的这个流程。
系统: Ubuntu 14.04 lts
mongodb版本:无要求,故最新版(v4.0.4)
1. 安装 mongodb
之前都是下载 deb 文件,然后解压安装的。今天试试通过软件源的方式去安装。官网地址
- 向系统的包管理器导入其使用的公钥
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
- 为 mongodb 创建资源文件
# 创建在 /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
- 重新加载本地包数据库
sudo apt-get update
- 下载 mongodb 包
# apt-get 获取的是最新版本的 mongodb ,并不能指定固定版本的 mongodb
sudo apt-get install -y mongodb-org
2. 启动 mongodb
启动 mongodb 之前,建议先修改它的配置文件,配置文件一般是 /etc/mongodb.conf
# 默认的配置文件内容
# 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:
做了以下这些修改
- 数据库存储位置。
/var/lib/mongodb
存放到/data/db
(需要先创建好 mkdir -p /data/db ) - 修改能连接数据库的IP。
bindIp
由 127.0.0.1 修改为 0.0.0.0 (所以Ip都能连接,也可以设置为需要连接到该数据库的 IP) - 启动安全验证。
下面是我修改后的配置文件
# 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
如果不想通过这种方式启动,那可以直接执行 mongod --fork --auth --config=/etc/mongod.conf
去启动。
输入 mongo --port 27018
,如果没报错什么的,那就说明成功启动了 mongodb。
ps: 由于之前的文件里面修改了端口号,所以需要指定端口号,否则连接不上
既然说了启动,那就说下正常的关闭 mongodb 的方式吧。当然也可以查询端口,杀进程的方式去关闭 mongodb
> use admin;
> db.shutdownServer();
3. 创建用户
在之前连接上 mongodb 的那个窗口,进行处理
# 切换数据库,这个是 默认库
use admin;
# 创建这个数据库下的管理员
db.createUser({
user: "admin",
pwd: "admin",
roles: [{
role: "userAdminAnyDatabase",
db: "admin"
}]
})
# 断开连接
exit
# 以 admin 用户登陆来进行操作
mongo --port 53082 -u admin -p admin --authenticationDatabase "admin"
# 创建你需要的数据库
use test;
# 创建这个数据库的管理员(可选)
db.createUser({
user: "testuser",
pwd: "passwd",
roles: [
{role: "userAdmin", db: "test"}
]
})
# 创建这个数据库下的普通用户,可以设置它的权限。下面创建的这个用户拥有读写(readWrite)权限
db.createUser({
user: "putonguser",
pwd: "passwd",
roles: [
{role: "readWrite", db: "test"}
]
})
# 以普通用户连接 mongodb
mongo --port 53082 -u putonguser -p passwd --authenticationDatabase "test"
4. 数据库的备份和还原
在原先服务器上备份(需要暂停服务的暂停服务),注意修改成数据库用户的正确端口和用户以及登陆密码
# 退出连接
exit;
# 开始备份
mongodump -h localhost --port 27018 -d test -u putonguser -p passwd -o .
# 压缩(对应的文件)
tar -zcvf test.tgz ./test
# 传输到第二台服务器上
scp -r test.tgz username@host:/remote/directory
在新的服务器上解压,并还原到指定的数据库中
# 解压
tar -xf test.tgz test
# 还原到指定(test)数据库
mongorestore -h localhost -d test --dir ./test --port 27018 -u putonguser -p passwd --authenticationDatabase "test"
然后查询下数据库,看看数据是否是正常的。
网友评论