Изменение каталога хранилища данных MongoDB

121

До сих пор я не указывал каталог данных MongoDB и имел только один основной раздел размером 30 ГБ.

Я просто закончил пространство и добавил новый жесткий диск. Как я могу перенести свои данные (это, по-видимому, в /var/lib/mongodb/) и настроить MongoDB, чтобы все закончилось с нового диска, не затрагивая мою существующую установку?

Теги:

9 ответов

155

Короткий ответ заключается в том, что параметр --dbpath в MongoDB позволит вам контролировать, какой каталог MongoDB считывает и записывает данные.

mongod --dbpath/usr/local/mongodb-data​​p >

Запустит mongodb и поместит файлы в /usr/local/mongodb-data.

В зависимости от вашего дистрибутива и установки MongoDB вы также можете настроить файл mongod.conf для этого автоматически:

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

Официальные пакеты Linux 10gen (Ubuntu/Debian или CentOS/Fedora) поставляются с базовым конфигурационным файлом, который помещается в /etc/mongodb.conf, и служба MongoDB читает это при запуске. Здесь вы можете внести изменения.

  • 9
    На моем Debian Box это mongodb.conf, а не mongod.conf
  • 9
    Я обновил /etc/mongodb.conf соответствии с этим решением. Затем, после запуска mongod , я увидел, что был использован /data/db . Почему обновление mongodb.conf не повлияло на то, где mongod хранил базу данных? (Обратите внимание, что использование аргумента --dbpath сработало.
Показать ещё 5 комментариев
76

Разрешил его за 2 минуты простоя:)
Просто переместите свою папку, добавьте символическую ссылку, затем настройте разрешения.

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
    Я думаю, что это должен быть ответ. Я всегда нахожу символические ссылки очень хорошим решением, и я продвигаю любое решение, которое использует их вместо изменения конфигурации и т. Д.
  • 0
    Вероятно, нет необходимости в usermod. Вам не хватает + x исполняемого разрешения для «других» пользователей в дереве базы данных chmod -R o+x /<home> . см .: stackoverflow.com/a/38193187/205049
Показать ещё 3 комментария
21

Создайте файл mongod.cfg в папке MongoDB, если у вас его нет. В моем случае: C:\Users\ivanbtrujillo\MongoDB

Затем отредактируйте mongod.cfg с помощью блокнота и добавьте строку со следующим (наш пользовательский dbpath):

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

В этом файле вы также должны указать logpath. Мой файл mongod.cfg:

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

Если вы используете mongoDB в качестве службы Windows, вам нужно изменить этот ключ и указать файл mongod.cfg.

Чтобы установить mongodb в качестве службы Windows, выполните следующую команду:

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

Откройте regedit.exe и перейдите по следующему маршруту:

HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\services\MongoDB

Служба MongoDB не работает, нам нужно отредактировать ключ ImagePath, удалить его содержимое и поместить следующее:

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

Мы указываем mongo его файл конфигурации и его путь к журналу.

Затем, когда вы запускаете службу mongodb, она работает.

Вот полный учебник по установке mongoDB в windows: http://ivanbtrujillo.herokuapp.com/2014/07/24/installing-mongodb-as-a-service-windows/

Надеюсь, что это поможет,

  • 0
    MongoDB 2.6 и новее используют файлы конфигурации YAML. Старый формат все еще поддерживается для обратной совместимости, но вы можете использовать новый. Подробности здесь .
  • 0
    Переменная dbpath также существует для Linux. Посмотрите в /etc/mongod.conf.
21

Скопируйте содержимое /var/lib/mongodb в /data/db. Файлы, которые вы должны искать, должны иметь имена типа your_db_name.ns и your_dbname.n, где n - число, начинающееся с 0. Если вы не видите такие файлы в /var/lib/mongodb, найдите их в своей файловой системе.

После копирования используйте --dbpath=/data/db при запуске MongoDB с помощью команды mongod.

  • 0
    Есть ли способ, чтобы это происходило каждый раз при перезагрузке сервера?
  • 1
    @JimThio вы можете добавить этот ключ в скрипт оболочки, который запускает mongodb. Обычно это /etc/init.d/mongod или /etc/init.d/mongodb.
11

Вот что я сделал, надеюсь, что это полезно для всех:

Шаги:

  • Остановить службы, использующие mongodb
  • Остановить mongod - мой способ сделать это был с моим rc файлом /etc/rc.d/rc.mongod stop, если вы используете что-то еще, например systemd, вы должны проверить свою документацию, как это сделать
  • Создать новый каталог на новом жестком диске - mkdir /mnt/database
  • Скопировать папку данных вашего mongodb в новое место - cp -R /var/lib/mongodb/ /mnt/database/
  • Удалить старую папку базы данных - rm -rf /var/lib/mongodb/
  • Создать символическую ссылку на новую папку базы данных - ln -s /mnt/database/mongodb /var/lib/mongodb
  • Начать mongod - /etc/rc.d/rc.mongod start
  • Проверьте журнал вашего mongod и выполните некоторую проверку работоспособности (попробуйте mongo подключиться к вашей базе данных, чтобы убедиться, что все в порядке)
  • Запустите службы, которые вы остановили в пункте 1

Нет необходимости говорить, что вы должны быть осторожны, когда вы это делаете, особенно с помощью rm -rf, но я думаю, что это лучший способ сделать это.

Вы никогда не должны пытаться копировать dir базы данных во время работы mongod, потому что могут быть службы, которые записывают/читают из него, которые изменят содержимое вашей базы данных.

  • 1
    Хотя старый ответ, он работал частично для меня. Вы также должны убедиться, что пользователь mongodb владеет новым каталогом и символом, чтобы он работал. chown mongodb:mongodb -R /mnt/database/mongodb
  • 1
    Я обновил ответ с вашим комментарием!
Показать ещё 1 комментарий
10

Если он установлен через apt-get в Ubuntu 12.04, не забудьте chown -R mongodb:nogroup /path/to/new/directory. Также измените конфигурацию на /etc/mongodb.conf.

В качестве напоминания пакет mongodb-10gen теперь запускается с помощью выскочки, поэтому config script находится в /etc/init/mongodb.conf

Я просто прошел через это, надеюсь, googlers найдут это полезным:)

6

для окон 10, следующая команда будет работать для вас, если вы хотите изменить путь по умолчанию на следующий путь --- Просто введите это в каталог bin mongodb -

mongod --dbpath = yourdirectory\data\db

Если вы хотите также переместить существующие данные, просто скопируйте все папки из существующего каталога data\db в новый каталог перед выполнением команды. А также остановите существующие службы mongodb, которые запущены. Надеюсь, что это поможет.

  • 1
    Это работает и в Linux. Я создал каталог с именем "data" рядом со скриптом mondod и запустил его так: ./mongod --dbpath = data
1

пользователь является mongod вместо mongodb

sudo chown mongod: mongod/newlocation

Вы можете просмотреть журналы ошибок, если сбой службы: -

/var/log/mongodb/mongod.log

0

В debian/ubuntu вам нужно отредактировать файл /etc/init.d/mongodb script. Действительно, этот файл должен извлекать настройки из /etc/mongodb.conf но, похоже, не тянет каталог по умолчанию (вероятно, ошибка).

Это немного взломать, но добавив их в script, он начал правильно:

добавить:

DBDIR=/database/mongodb

изменения:

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

в

DAEMON_OPTS=${DAEMON_OPTS:-"--unixSocketPrefix=$RUNDIR --dbpath $DBDIR --config $CONF run"}
  • 0
    Что делать, если вы хотите поместить базу данных в свой домашний каталог вместо root?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню