我积极解决 发表于 2018-10-27 15:20:29

CentOS下MongoDB的升级

Complete!  升级完成后,我们来试着启动下服务:
  # /etc/init.d/mongod start
  Starting mongod: all output going to: /var/log/mongo/mongod.log
  forked process: 11577
  
  糟糕,服务启不来,我们换下别的启动方法.
  # which mongod
  /usr/bin/mongod
  # /usr/bin/mongod -f /etc/mongod.conf
  forked process: 11590
  all output going to: /var/log/mongo/mongod.log
  child process started successfully, parent exiting
  我们来看一下,唉,这样是能正常启动的.
  # ps -ef | grep mongo
  root   11590   12 10:58 ?      00:00:00 /usr/bin/mongod -f /etc/mongod.conf
  root   11601 114510 10:58 pts/0    00:00:00 grep mongo
  既然服务启动了,我们来看一下能不能连接:
  # mongo
  MongoDB shell version: 2.2.0
  connecting to: test
  Welcome to the MongoDB shell.
  For interactive help, type "help".
  For more comprehensive documentation, see
  http://docs.mongodb.org/
  Questions? Try the support group
  http://groups.google.com/group/mongodb-user
  > use admin
  switched to db admin
  > db.auth("root","redhat")
  1
  > show dbs
  admin 0.203125GB
  jzf 0.203125GB
  local 0.203125GB
  test 0.203125GB
  > use jzf
  switched to db jzf
  > show collections
  blog
  food
  myself
  system.indexes
  system.users
  test
  test.test
  user
  > db.food.find()
  { "_id" : 1, "fruit" : [ "apple", "banana", "peach", "strawberry" ] }
  { "_id" : 2, "fruit" : [ "apple", "orange", "peach", "strawberry" ] }
  { "_id" : 3, "fruit" : [ "cherry", "orange", "peach", "strawberry" ] }
  { "_id" : 4, "fruit" : [ "cherry", "orange", "kumquat", "strawberry" ] }
  > exit
  bye
  由上面可以看出,服务器版本上升了(原来的2.0.7升到了2.2.0).而且原来的数据都在!突然感觉备不备份都没差,当然生产环境中最好别偷懒.
  可是为什么我们之前的第一种方式服务启不来呢,下面的操作是我试图再次用那种方式启动:
  # ps -ef | grep mongo
  root   11590   10 10:58 ?      00:00:01 /usr/bin/mongod -f /etc/mongod.conf
  root   11618 114510 11:26 pts/0    00:00:00 grep mongo
  # kill -2 11590
  # ps -ef | grep mongo
  root   11621 114510 11:26 pts/0    00:00:00 grep mongo
  # /etc/init.d/mongod restart
  Stopping mongod:                                          
  Starting mongod: all output going to: /var/log/mongo/mongod.log
  forked process: 11639
  
  还是启不来,我们来看看日志,看到底是什么原因
  # vim /var/log/mongo/mongod.log
  Thu Aug 16 11:27:10 opening db:test
  Thu Aug 16 11:27:10 couldn't open /var/lib/mongo/test.ns errno:13 Permission denied
  Thu Aug 16 11:27:10 error couldn't open file /var/lib/mongo/test.ns terminating
  Thu Aug 16 11:27:10 dbexit:
  Thu Aug 16 11:27:10 shutdown: going to close listening sockets...
  Thu Aug 16 11:27:10 shutdown: going to flush diaglog...
  Thu Aug 16 11:27:10 shutdown: going to close sockets...
  Thu Aug 16 11:27:10 shutdown: waiting for fs preallocator...
  Thu Aug 16 11:27:10 shutdown: lock for final commit...
  Thu Aug 16 11:27:10 shutdown: final commit...
  Thu Aug 16 11:27:10 shutdown: closing all files...
  Thu Aug 16 11:27:10 closeAllFiles() finished
  Thu Aug 16 11:27:10 journalCleanup...
  Thu Aug 16 11:27:10 removeJournalFiles
  Thu Aug 16 11:27:10 flushing directory /var/lib/mongo/journal
  Thu Aug 16 11:27:10 removeJournalFiles end
  Thu Aug 16 11:27:10 shutdown: removing fs lock...
  Thu Aug 16 11:27:10 dbexit: really exiting now
  打开日志一看,很明显的字眼映入眼帘:errno:13 Permission denied,这种错误信息太常见了!第一感觉当然是看数据库的目录权限咯:
  # ls -l /var/lib/mongo/
  total 852856
  -rw------- 1 root   root    67108864 Aug 14 23:21 admin.0
  -rw------- 1 root   root   134217728 Aug 14 23:28 admin.1
  -rw------- 1 root   root    16777216 Aug 14 23:21 admin.ns
  drwxr-xr-x 2 mongod mongod      4096 Aug 16 11:34 journal
  -rw------- 1 root   root    67108864 Aug 15 00:36 jzf.0
  -rw------- 1 root   root   134217728 Aug 15 02:45 jzf.1
  -rw------- 1 root   root    16777216 Aug 15 00:36 jzf.ns
  -rw------- 1 mongod mongod67108864 Aug 14 12:50 local.0
  -rw------- 1 mongod mongod 134217728 Aug 14 18:50 local.1
  -rw------- 1 mongod mongod16777216 Aug 14 12:50 local.ns
  -rwxr-xr-x 1 mongod mongod         0 Aug 16 11:34 mongod.lock
  drwxr-xr-x 2 root   root      4096 Aug 15 02:35 test
  -rw------- 1 root   root    67108864 Aug 15 02:35 test.0
  -rw------- 1 root   root   134217728 Aug 15 02:45 test.1
  -rw------- 1 root   root    16777216 Aug 15 02:35 test.ns
  看到这里,我想大家应该明白,为什么后面那种方法能正常启动了.那么我们来改一下目录权限,看看前面那种启动方式能不能正常启动服务:
  # chown -R mongod. /var/lib/mongo/
  # ls -l /var/lib/mongo/
  total 852856
  -rw------- 1 mongod mongod67108864 Aug 14 23:21 admin.0
  -rw------- 1 mongod mongod 134217728 Aug 14 23:28 admin.1
  -rw------- 1 mongod mongod16777216 Aug 14 23:21 admin.ns
  drwxr-xr-x 2 mongod mongod      4096 Aug 16 11:34 journal
  -rw------- 1 mongod mongod67108864 Aug 15 00:36 jzf.0
  -rw------- 1 mongod mongod 134217728 Aug 15 02:45 jzf.1
  -rw------- 1 mongod mongod16777216 Aug 15 00:36 jzf.ns
  -rw------- 1 mongod mongod67108864 Aug 14 12:50 local.0
  -rw------- 1 mongod mongod 134217728 Aug 14 18:50 local.1
  -rw------- 1 mongod mongod16777216 Aug 14 12:50 local.ns
  -rwxr-xr-x 1 mongod mongod         0 Aug 16 11:34 mongod.lock
  drwxr-xr-x 2 mongod mongod      4096 Aug 15 02:35 test
  -rw------- 1 mongod mongod67108864 Aug 15 02:35 test.0
  -rw------- 1 mongod mongod 134217728 Aug 15 02:45 test.1
  -rw------- 1 mongod mongod16777216 Aug 15 02:35 test.ns
  # /etc/init.d/mongod start
  Starting mongod: forked process: 11703
  all output going to: /var/log/mongo/mongod.log
  child process started successfully, parent exiting
  
  正常启动了.那么这两种方法倒底有什么不同的地方呢?我们来看一下mongod的启动脚本
  # vim /etc/init.d/mongod
  ......
  MONGO_USER=mongod
  MONGO_GROUP=mongod
  ......
  start()
  {
  echo -n $"Starting mongod: "
  daemon --user "$MONGO_USER" $NUMACTL $mongod $OPTIONS
  RETVAL=$?
  echo
  [ $RETVAL -eq 0 ] && touch /var/lock/subsys/mongod
  }
  原来,mongod启动脚本中服务启动的用户是mongod,而用后一种方法启动用户是root.那么服务启不了,报权限被拒绝也是很正常的事啦.下面我们来分别看下:

页: [1]
查看完整版本: CentOS下MongoDB的升级