Зміна каталогу зберігання даних MongoDB


184

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

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


Ви також повинні переконатися, що у ваших дозволах на новій точці монтажу є r + x: sudo chmod o+rx /mediaнаприклад, якщо ваша точка монтування media. R + x має бути доступним для інших груп та користувачів з першої точки монтажу.
словазрештою

Відповіді:


219

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

mongod --dbpath / usr / local / mongodb-data

Запустить 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 це mongodb.conf, а не mongod.conf
UpTheCreek

12
Я оновлювався /etc/mongodb.confвідповідно до цього рішення. Потім, після запуску mongod, я побачив, що /data/dbвикористовується. Чому оновлення mongodb.conf не вплинуло на те, де mongod зберігає db? (Зауважте, що використання --dbpathаргументу спрацювало.
Кевін Мередіт

У моєму вікні Fedora саме це /etc/mongodb.confі оновлення добре працює для мене.
tuxdna

4
Новий каталог даних повинен бути chown"d" користувачеві mongod для сценаріїв запуску послуги.
Піт Гарафано

як я роблю чуун?
чові

102

Вирішено це за 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
Я думаю, що це має бути відповіддю. Я завжди вважаю, що символічні посилання є дуже хорошим рішенням, і я просуваю будь-яке рішення, яке використовує їх через зміну конфігурації тощо.
хлопець mograbi

Ймовірно, немає потреби в usermod. Вам не вистачає виконавчого дозволу + x для "інших" користувачів на дереві dbpath chmod -R o+x /<home>. см: stackoverflow.com/a/38193187/205049
ööri

Я дотримуюсь цих інструкцій (використовуючи dbpath на іншому диску), я все одно отримую Permission denied: "/var/lib/mongodb"Ось так /home/../mongodb/mongodb/ виглядає так: drwxrwxr-x 3 mongodb mongodb 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

1
Необхідно уточнення, де не те , що папка в при виконанні mvкоманди, якщо виконати команду мВ всередині Lib, вам більше не доведеться MongoDB для lnдо
Енді

1
Я спробував ваше рішення, але коли я перезавантажую програму, він видає таку помилку - 2019-11-18T18: 58: 45.215 + 1100 Я Зберігаю [initandlisten] виняток у initAndListen: 28596 Неможливо визначити статус файлу блокування у каталозі даних / var / lib / mongo: boost:: файлова система: статус: в дозволі відмовлено: "/var/lib/mongo/mongod.lock", припинення
Arun chauhan

33

Наступна команда буде працювати для вас, якщо ви хочете змінити шлях за замовчуванням. Просто введіть це у каталог бін mongodb.

mongod --dbpath=yourdirectory\data\db

Якщо ви також хочете перемістити існуючі дані, просто скопіюйте всі папки з існуючого каталогу \ db в новий каталог перед виконанням команди.

А також зупинити існуючі послуги mongodb, які працюють.


1
Це працює і в Linux. Я створив каталог під назвою "data" поруч із сценарієм mondod і запускаю його так: ./mongod --dbpath = data
cagdasalagoz

29

Створіть у папці MongoDB файл під назвою mongod.cfg, якщо у вас його немає. У моєму випадку: 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 це конфігураційний файл та його logpath.

Потім, коли ви запускаєте службу mongodb, вона працює.

Ось повний посібник із встановлення mongoDB у Windows: http://ivanbtrujillo.herokuapp.com/2014/07/24/installing-mongodb-as-a-aserservice-windows/

Сподіваюся, це допоможе,


1
MongoDB 2.6 і новіші використовують конфігураційні файли YAML. Старий формат все ще підтримується для зворотної сумісності, але ви можете скористатися новим. Деталі тут .
gronostaj

Змінна dbpath також існує і для Linux. Подивіться в /etc/mongod.conf.
xpros

23

Скопіюйте вміст /var/lib/mongodbдо /data/db. Файли, які ви повинні шукати, повинні мати такі імена, як your_db_name.nsі your_dbname.nде nчисло, що починається з 0. Якщо ви не бачите таких файлів під /var/lib/mongodb, знайдіть їх у своїй файловій системі.

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


чи є спосіб це зробити щоразу, коли сервер перезапускається?
user4951

1
@JimThio Ви можете додати цей перемикач до сценарію оболонки, який запускає mongodb. Зазвичай це /etc/init.d/mongod або /etc/init.d/mongodb.
lobster1234

19

Ось що я зробив, сподіваюся, це корисно для всіх інших:

Кроки:

  1. Зупиніть свої послуги , які використовують mongodb
  2. Зупиніть mongod - мій спосіб зробити це було з моїм файлом rc /etc/rc.d/rc.mongod stop, якщо ви використовуєте щось інше, наприклад systemd, ви повинні перевірити свою документацію, як це зробити
  3. Створіть новий каталог на свіжому жорсткому диску -mkdir /mnt/database
  4. Переконайтесь, що mongodb має привілеї читати / писати з цього каталогу (зазвичай chown mongodb:mongodb -R /mnt/database/mongodb) - дякую @DanailGabenski.
  5. Скопіюйте папку даних mongodb на нове місце -cp -R /var/lib/mongodb/ /mnt/database/
  6. Видаліть стару папку бази даних -rm -rf /var/lib/mongodb/
  7. Створіть символічне посилання на нову папку бази даних -ln -s /mnt/database/mongodb /var/lib/mongodb
  8. Початок монгоду -/etc/rc.d/rc.mongod start
  9. Перевірте журнал монгоду і зробіть певну перевірку (спробуйте mongoпідключитися до бази даних, щоб побачити, чи все в порядку)
  10. Почніть свої послуги, які ви зупинили в пункті 1

Не потрібно говорити, що вам слід бути обережними, коли ви робите це, особливо, rm -rfале я думаю, що це найкращий спосіб зробити це.

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


1
Хоча давня відповідь, це для мене частково спрацювало. Вам також потрібно переконатися, що користувачеві mongodb належить новий каталог та symlik для того, щоб він працював. chown mongodb:mongodb -R /mnt/database/mongodb
Данаїл Габенський

3
У пункті 5 зробіть команду схожою на cp -rp / var / lib / mongodb / / mnt / database / Це дозволить зберегти право власності та дозвіл на папку.
Кетан Гуматкар

Я спробував ваше рішення, але коли я перезавантажую програму, вона дає наступну помилку - 2019-11-18T18: 58: 45.215 + 1100 Я Зберігаю [initandlisten] виняток у initAndListen: 28596 Неможливо визначити статус файлу блокування у каталозі даних / var / lib / mongo: boost:: файлова система :: статус: В дозволі відмовлено: "/var/lib/mongo/mongod.lock", припинення
Arun chauhan

10

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

Як нагадування, mongodb-10genпакет тепер запускається за допомогою запуску, тому сценарій конфігурації знаходиться в/etc/init/mongodb.conf

Я щойно пережив це, сподіваюся, що googlers вважає це корисним :)


1

Для мене користувач був mongodзамістьmongodb

sudo chown mongod:mongod /newlocation

Ви можете бачити журнали помилок, якщо сервіс не працює:

/var/log/mongodb/mongod.log


0

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

Це трохи хак, але додавши їх до сценарію, він змусив його почати правильно:

додати:

DBDIR=/database/mongodb

зміни:

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

до:

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

що робити, якщо ви хочете помістити базу даних у свій домашній каталог замість root?
JesseBoyd
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.