2011-05-11 12 views
125

Hasta ahora no he especificado un directorio de datos MongoDB y solo he tenido una partición primaria de 30 GB.Cambiando el directorio del almacén de datos MongoDB

Me acabo de quedar sin espacio y agregué un nuevo disco duro. ¿Cómo puedo transferir mis datos (aparentemente en el /var/lib/mongodb/) y configurar MongoDB para que todo se ejecute en el nuevo disco sin afectar a mi instalación existente?

Respuesta

20

Copie los contenidos de /var/lib/mongodb a /data/db. Los archivos que debe buscar deben tener nombres como your_db_name.ns y your_dbname.n donde n es un número que comienza con 0. Si no ve estos archivos en /var/lib/mongodb, búsquelos en su sistema de archivos.

Una vez copiado, use --dbpath=/data/db al iniciar MongoDB a través del comando mongod.

+0

¿hay alguna manera de que esto suceda cada vez que se reinicie el servidor? –

+1

@JimThio puede agregar este modificador al script de shell que inicia mongodb. Normalmente es /etc/init.d/mongod o /etc/init.d/mongodb. – lobster1234

157

La respuesta corta es que el parámetro --dbpath en MongoDB le permitirá controlar qué directorio MongoDB lee y escribe sus datos.

mongod --dbpath/usr/share/mongodb-datos locales

comenzaría mongodb y poner los archivos en /usr/local/mongodb-data.

Dependiendo de su distribución e instalación de MongoDB, también puede configurar el archivo mongod.conf hacer esto de forma automática:

# Store data in /usr/local/var/mongodb instead of the default /data/db 
dbpath = /usr/local/var/mongodb 

Los paquetes oficiales 10gen Linux (Ubuntu/Debian o CentOS/Fedora) de la nave con un archivo de configuración básica que se coloca en /etc/mongodb.conf, y el servicio MongoDB lee esto cuando se inicia. Podrías hacer tu cambio aquí.

+9

En mi cuadro Debian es mongodb.conf, no mongod.conf – UpTheCreek

+6

Actualicé '/ etc/mongodb.conf' según esta solución. Luego, después de iniciar 'mongod', vi que'/data/db' se usaba. ¿Por qué la actualización de mongodb.conf no afectó a dónde mongod almacenó el db? (Tenga en cuenta que al usar el argumento '--dbpath' trabajado. –

+0

En mi cuadro de Fedora es'/etc/mongodb.conf' y la actualización que funciona bien para mí. – tuxdna

10

Si está instalado a través de apt-get en Ubuntu 12.04, no se olvide de chown -R mongodb:nogroup /path/to/new/directory. Además, cambie la configuración al /etc/mongodb.conf.

Como recordatorio, el paquete mongodb-10gen ahora se inicia a través de advenedizo, por lo que la secuencia de comandos de configuración está en /etc/init/mongodb.conf

simplemente pasé por esto, los empleados de Google esperanza les resulta útil :)

79

resolvió en 2 minutos tiempo de inactividad :)
Simplemente mueva su carpeta, agregue enlace simbólico, luego ajuste los permisos.

sudo service mongod stop 
sudo mv mongodb /new/disk/mongodb/ 
sudo ln -s /new/disk/mongodb/ /var/lib/mongodb 
sudo chown mongodb:mongodb /new/disk/mongodb/ 
sudo service mongod start 

# test if mongodb user can access new location: 
sudo -u mongodb -s cd /new/disk/mongodb/ 
# resolve other permissions issues if necessary 
sudo usermod -a -G <newdisk_grp> mongodb 
+3

Creo que esta debería ser la respuesta. Siempre encuentro que los enlaces simbólicos son una muy buena solución y promociono cualquier solución que los use sobre el cambio de configuración, etc. –

+0

Probablemente no necesite usermod. Se está perdiendo el permiso ejecutable + x para "otros" usuarios en el árbol de dbpath '' 'chmod -R o + x/' ''. See: http://stackoverflow.com/ a/38193187/205049 – oori

+0

Sigo estas instrucciones (usando dbpath en otro disco), sigo obteniendo 'Permiso denegado:"/var/lib/mongodb "' Así es como /home/../mongodb/mongodb/ se parece a: 'drwxrwxr-x 3 mongodb mongod 4096 oct 13 09:32 ../ drwxr-xr-x 2 mongodb nogroup 4096 oct 13 09:29 journal/ -rw ------ x 1 mongodb nogroup 67108864 sep 23 14:44 local.0 * -rw ------ x 1 mongodb nogroup 16777216 sep 23 14:44 local.ns * -rwxr-xr-x 1 mongodb mongodb 0 oct 13 09:29 mongod.lock * ' – Machinerium

0

En Debian/Ubuntu, tendrá que editar el script /etc/init.d/mongodb. Realmente, este archivo debería estar extrayendo la configuración de/etc/mongodb.conf pero no parece que tirar el directorio predeterminado (probablemente un error)

Esto es un poco de un truco, pero la adición de estos para el guión lo hizo inicia correctamente:

complemento:

DBDIR=/database/mongodb 

cambio:

DAEMON_OPTS=${DAEMON_OPTS:-"--unixSocketPrefix=$RUNDIR --config $CONF run"} 

a:

DAEMON_OPTS=${DAEMON_OPTS:-"--unixSocketPrefix=$RUNDIR --dbpath $DBDIR --config $CONF run"} 
+0

¿Qué sucede si desea poner la base de datos en su directorio de inicio en lugar de la raíz? – JesseBoyd

21

Cree un archivo llamado mongod.cfg en la carpeta MongoDB si no lo tiene. En mi caso: C: \ Users \ ivanbtrujillo \ MongoDB

A continuación, editar mongod.cfg con el bloc de notas y añadir una línea con la siguiente (nuestro dbpath personalizado):

dbpath=C:\Users\ivanbtrujillo\MongoDB\data\db 

En este archivo se debe especifique el camino de registro también. Mi archivo mongod.cfg es:

logpath=C:\Users\ivanbtrujillo\MongoDB\log\mongo.log 
dbpath=C:\Users\ivanbtrujillo\MongoDB\data\db 

Si utiliza MongoDB como un servicio de Windows, usted tiene que cambiar esta clave y Especificar el archivo mongod.cfg.

Para instalar mongodb como un servicio que se ejecuta este comando ventanas:

**"C:\Users\ivanbtrujillo\MongoDB\bin\mongod.exe" --config "C:\Users\ivanbtrujillo\MongoDB\mongod.cfg" –install** 

regedit.exe, y va a la siguiente ruta:

HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\services\MongoDB 

servicio MongoDB no funciona, tenemos que editar la clave de ImagePath, elimine su contenido y ponga lo siguiente:

**"C:\Users\ivanbtrujillo\MongoDB\bin\mongod.exe" --config "C:\Users\ivanbtrujillo\MongoDB\mongod.cfg" 
--logpath="C:\Users\ivanbtrujillo\MongoDB\log\mongo.log" –service** 

Indicamos que es co archivo nfig y su ruta de acceso.

Luego, cuando inicia el servicio de mongodb, funciona.

Aquí es un completo tutorial para instalar MongoDB en las ventanas: http://ivanbtrujillo.herokuapp.com/2014/07/24/installing-mongodb-as-a-service-windows/

creo que sirve,

+0

MongoDB 2.6 y más nuevos usan archivos de configuración YAML. El formato antiguo todavía es compatible con la compatibilidad con versiones anteriores, pero es posible que desee utilizar el nuevo. Detalles [aquí] (http://docs.mongodb.org/manual/reference/configuration-options/#storage-options). – gronostaj

+0

variable dbpath también existe para Linux también. Mire en /etc/mongod.conf. – xpros

11

Aquí es lo que hice, espero que sea útil a alguien más:

pasos:

  1. Deja de sus servicios que están utilizando mongodb
  2. parada mongod - mi forma de hacerlo era con mi archivo rc /etc/rc.d/rc.mongod stop, si utiliza otra cosa, como systemd usted debe comprobar la documentación de cómo hacer eso
  3. crear un nuevo directorio en el disco duro fresca - mkdir /mnt/database
  4. Copia la carpeta de datos de su mongodb a la nueva ubicación - cp -R /var/lib/mongodb/ /mnt/database/
  5. Retire la carpeta de la base de edad - rm -rf /var/lib/mongodb/
  6. Crear un enlace simbólico a la nueva carpeta de la base - ln -s /mnt/database/mongodb /var/lib/mongodb
  7. inicio mongod - /etc/rc.d/rc.mongod start
  8. Compruebe el registro de de su mongod y hacer la comprobación poco de cordura (tratar mongo para conectarse a la base de datos para ver si todo está bien)
  9. comenzar su los servicios que detuvo en el punto 1

No es necesario decir que debe tener cuidado al hacer esto, especialmente con rm -rf, pero creo que esta es la mejor manera de hacerlo.

Nunca intente copiar el directorio de la base de datos mientras mongod se está ejecutando, porque puede haber servicios que lo escriban/lean, lo que cambiará el contenido de su base de datos.

1

usuario está mongod en lugar de mongodb

sudo chown mongod: mongod/newLocation

Usted puede ver los registros de errores si el servicio falla: -

/var/log/mongodb/mongod.log

7

para windows 10, el siguiente comando funcionará para usted, si usted desea cambiar la ruta por defecto a la siguiente ruta --- sólo tiene que escribir esto en el directorio bin de mongodb-

mongod --dbpath = sudirectorio \ data \ db

En caso de que quiera mover los datos existentes, lo acaba de copiar todas las carpetas de datos de directorio db \ existente para nuevo directorio antes de ejecutar el comando. Y también detener los servicios de mongodb existentes que se están ejecutando. Espero que ayude.

Cuestiones relacionadas