Изменение каталога хранилища данных MongoDB
До сих пор я не указывал каталог данных MongoDB и имел только один основной раздел размером 30 ГБ.
Я просто закончил пространство и добавил новый жесткий диск. Как я могу перенести свои данные (это, по-видимому, в /var/lib/mongodb/
) и настроить MongoDB, чтобы все закончилось с нового диска, не затрагивая мою существующую установку?
Ответы
Ответ 1
Короткий ответ заключается в том, что параметр --dbpath
в MongoDB позволит вам контролировать, какой каталог MongoDB считывает и записывает данные.
mongod --dbpath/usr/local/mongodb-datap >
Запустит 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 читает это при запуске. Здесь вы можете внести изменения.
Ответ 2
Разрешил его за 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
Создайте файл 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/
Надеюсь, что это поможет,
Ответ 4
Следующая команда будет работать для вас, если вы хотите изменить путь по умолчанию.
Просто введите это в каталог bin mongodb.
mongod --dbpath=yourdirectory\data\db
Если вы тоже хотите переместить существующие данные, просто скопируйте все папки из существующего каталога data\db в новый каталог перед выполнением команды.
А также остановите существующие службы mongodb, которые работают.
Ответ 5
Скопируйте содержимое /var/lib/mongodb
в /data/db
. Файлы, которые вы должны искать, должны иметь имена типа your_db_name.ns
и your_dbname.n
, где n
- число, начинающееся с 0. Если вы не видите такие файлы в /var/lib/mongodb
, найдите их в своей файловой системе.
После копирования используйте --dbpath=/data/db
при запуске MongoDB с помощью команды mongod
.
Ответ 6
Вот что я сделал, надеюсь, это пригодится кому-то еще:
Этапы:
- Остановите свои услуги, которые используют mongodb
- Остановите mongod - мой способ сделать это был с моим rc файлом
/etc/rc.d/rc.mongod stop
, если вы используете что-то другое, например, systemd, вам следует проверить документацию, как это сделать
- Создайте новый каталог на новом жестком диске -
mkdir /mnt/database
- Убедитесь, что у mongodb есть права на чтение/запись из этого каталога (обычно
chown mongodb:mongodb -R /mnt/database/mongodb
) - спасибо @DanailGabenski.
- Скопируйте папку данных вашего 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
, но я думаю, что это лучший способ сделать это.
Никогда не пытайтесь копировать каталог базы данных во время работы mongod, потому что могут быть службы, которые пишут/читают из него, что изменит содержимое вашей базы данных.
Ответ 7
Если он установлен через 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 найдут это полезным:)
Ответ 8
пользователь является mongod вместо mongodb
sudo chown mongod: mongod/newlocation
Вы можете просмотреть журналы ошибок, если сбой службы: -
/var/log/mongodb/mongod.log
Ответ 9
В 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"}