Mongodb 更换数据目录

这不是数据迁移, 迁移的话通常用mongodump, 另说. 本篇是因为服务器主分区只有20G, 数据库文件数据量大了, 主分区不够了需要迁移到新挂载的数据盘.挂载的知识请看(). 下面是思路:

  1. 查看MongoDB的状态, 终止数据库运行
  2. 查看数据库数据, 日志路径
  3. 压缩备份, 拷贝到新目录
  4. 重启

# 1.查看MongoDB状态

1
2
3
  $ mongo
  ...
  >

连接成功则表示mongod已经运行

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
  $ service mongod status 
  > stop/waiting 表示不是通过service运行的
  > start/running 表示通过service运行的
  
  $ service mongod stop 停止
  $ service mongod start/restart 重启
  or
  $ ps -aux | grep mongo
  >root      7695  0.3 13.5 29712004 1109256 ?    Sl   Dec14   2:37 mongod --fork --logpath /var/log/mongodb/mongodb.log --dbpath /var/lib/mongodb
   ubuntu   24526  0.0  0.0  10468  2232 pts/1    R+   10:43   0:00 grep --color=auto mongo
  表示mongod服务是通过--fork 形式手动启动的
  
  $ kill PID(7695) 终止服务
  

# 2.查看数据库数据, 日志路径

  • service 启动的mongod服务 此时通过/etc/init.d/mongodb启动服务, 默认使用/etc/mongod.conf配置文件

  • mongod –fork 启动mongod服务 默认也会使用/etc/mongod.conf配置文件, 但是当指定dbpath logpath后以指定为准

mongod.conf文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
...
storage:
dbPath: /var/lib/mongodb
journal:
  enabled: true
...
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log

修改对应路径:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
...
storage:
dbPath: /data/db/mongodb
journal:
  enabled: true
...
systemLog:
destination: file
logAppend: true
path: /data/db/log/mongod.log

本例中前人通过指定logpath dbpath的方式启动服务

# 3.压缩备份, 拷贝到新目录

知道了原来的数据和日志位置, 那么可以压缩备份原来的数据了, 本例以/data/db/mongodb为新的数据目录 /data/db/log为新的日志目录

1
2
3
4
$ cd /var/lib
$ tar -zcvf mongodb_backup_xxxxxx.tar.gz /var/lib/mongodb
$ cp -ra /var/lib/mongodb /data/db/mongodb
$ rm -rf /var/lib/mongodb

# 4.重启mongod服务

1
$ sudo service mongod start

or

1
$ sudo mongod --dbpath /data/db/mongodb --logpath /data/db/log/mongod.log

# 问题: 启动失败

  • 查看新数据目录权限
1
2
$ cd /data/db
$ ll

直接拷贝 已经是mongodb:mongodb 用户组了

  • 查看日志 访问mongodb-27017.sock 无权限
1
2
3
...
Failed to unlink socket file /tmp/mongodb-27017.sock errno:1 Operation not permitted
...
1
2
3
$ cd /tmp
$ ll
$ rm -rf mongodb-27017.sock 

重新启动 重新查看 mongodb-27017.sock 文件

1
2
3
$ ls - lat /tmp/mongodb-27017.sock
>
srwx------ 1 mongodb mongodb 0 Dec 14 21:12 /tmp/mongodb-27017.sock

注: 启动相关日志 还是在/var/log/mongodb

Licensed under CC BY-NC-SA 4.0