Mongodb где хранятся файлы баз данных

Обновлено: 01.07.2024

Перед тем, как углубиться в то, как MongoDB хранит данные, есть концепция, которая должна быть понятной, а именно файлы, отображаемые в Memeory.

На рисунке ниже показано, как база данных работает с базовой системой.

  • Файл с отображением в памяти - это ОС, которая создает файл данных в памяти через mmap, который отображает файл в область виртуальной памяти.
  • Для этого процесса виртуальная память является абстракцией физической памяти, а размер адресного пространства составляет 2 ^ 64.
  • Операционная система использует mmap для отображения всех данных, требуемых процессом, в это адресное пространство (красная линия), а затем отображает текущие данные, которые должны быть обработаны, в физическую память (серая линия)
  • Когда процесс обращается к определенным данным, если данные не находятся в виртуальной памяти, возникает сбой страницы, и затем ОС загружает данные с жесткого диска в виртуальную память и физическую память
  • Если физическая память заполнена, запускается операция выгрузки. В это время некоторые данные необходимо записать обратно на диск. Если это чистые данные памяти, они записываются обратно в раздел подкачки. Если нет, они записываются обратно на диск.



  • С отображенным в память файлом данные, к которым осуществляется доступ, оказываются в памяти, упрощая логику MongoDB для доступа и изменения данных.
  • MongoDB читает и пишет имеет дело только с виртуальной памятью, остальное оставлено для ОС
  • Размер виртуальной памяти = все размеры файлов + некоторые другие издержки (соединение, стек)
  • Если журнал включен, размер виртуальной памяти почти удвоится
  • Преимущества использования MMF 1: не нужно самостоятельно управлять планированием памяти и диска 2: стратегия LRU 3: во время процесса перезапуска кэш все еще там.
  • Недостатки использования MMF 1: фрагментация диска будет влиять на использование ОЗУ, высокая скорость чтения также повлияет на 2: невозможно оптимизировать алгоритм планирования самостоятельно, используйте только LRU




  • Файлы на диске состоят из экстентов, и пространство выделения также выделяется в единицах экстентов
  • Коллекция имеет один или несколько объектов
  • Запись пространства имен в файле ns указывает на первый экстент этой коллекции

При создании базы данных (на самом деле MongoDB не создает базу данных явно, она автоматически создает базу данных при записи данных в коллекцию в базе данных), MongoDB выделяет набор файлов данных, все коллекции, индексы и базу данных. Другие метаданные хранятся в этих файлах. Файл данных находится в dbpath, указанном при запуске, и по умолчанию находится в / data / db. Типичная структура файловой организации выглядит следующим образом:

Мой Хост пришел с экземпляром mongodb, и в нем нет каталога/db, так что теперь мне интересно, что я могу сделать, чтобы узнать, где на самом деле хранятся данные.

mongod по умолчанию расположение базы данных /data/db/ .

Если вы запускаете ps -xa | grep mongod и не видите --dbpath , который явно указывает mongod искать этот параметр для местоположения базы данных, и у вас нет dbpath в вашем mongodb.conf , тогда местоположение по умолчанию будет: /data/db/ , и вы должны посмотреть там ,.

Что говорит ваш файл конфигурации?

Если это не правильно, попробуйте это, ваши файлы базы данных будут присутствовать в списке:

Это /var/lib/mongodb/* в моей установке по умолчанию (Ubuntu 11.04).

Обратите внимание, что для удобства существует также файл /var/lib/mongodb/mongod.lock , содержащий PID mongod , однако он находится в каталоге данных, который мы ищем .

В более новой версии mongodb v2.6.4 попробуйте:

Это даст вам что-то вроде этого:

И там хранятся данные.

Хотя этот вопрос предназначен для Linux/Unix экземпляров Mongo, он является одним из первых результатов поиска независимо от используемой операционной системы, поэтому для будущих пользователей Windows, которые найдут это:

Если MongoDB настроен как служба Windows по умолчанию, его обычно можно найти, посмотрев запись «Путь к исполняемому файлу» в свойствах службы MongoDB:

По моему опыту местоположение по умолчанию /var/lib/mongodb после того, как я

Я нашел мой здесь в системе OSX/usr/local/var/mongodb

Я считаю db.serverCmdLineOpts() наиболее надежным способом найти фактический путь, если вы можете подключиться к серверу. "Parsed.storage.dbPath" содержит путь, используемый вашим сервером в настоящее время, и доступен как в случае его использования в конфигурации, так и в аргументах командной строки.

Также в моем случае было важно убедиться, что значение config отражает фактическое значение (т.е. config не изменилось после последнего перезапуска), что не гарантируется предлагаемыми здесь решениями.

Нашел это, просто ковыряясь в /var/db . Хотя спасибо за помощь - я уверен, что эти ответы применимы к другим системам (например, Ubuntu) и помогут другим!

Если бы вы могли как-то найти mongod.log и сделать над ним grep

Значение для dbpath является местоположением данных для mongodb !! Всего наилучшего :)

Для Windows Перейдите в папку MongoDB\Server\4.0\bin и откройте файл mongod.cfg в любом текстовом редакторе. Затем найдите строку, которая определяет параметр dbPath. Линия выглядит примерно так

dbPath: D:\Program Files\MongoDB\Server\4.0\data

Когда вы запускаете его, он показывает вам. Но я не знаю, можете ли вы что-то сделать на хосте. Если у вас есть доступ к командной строке и вы можете перезапустить службу, вы получите что-то вроде:

На самом деле каталог по умолчанию, в котором экземпляр mongod хранит свои данные,

Я использую Ubuntu 16.04. Я создал базу данных MongoDB. Когда я запускаю его (с помощью команды mongod), он говорит, что база данных находится в /data/db (dbpath=/data/db).

База данных работает нормально. Но в проводнике файлов я не могу найти эту папку. Я посмотрел папку Computer и папку Home (Computer/home/<my name>).

Я также показал скрытые файлы и папки с помощью Ctrl + H.

Как я могу найти мою папку с базой данных?

Вы должны найти местоположение в файле конфигурации: /etc/mongod.conf

grep dbPath /etc/mongod.conf

Согласно mongodb docs:

Значение по умолчанию путь /data/db directory

По умолчанию MongoDB прослушивает подключения от клиентов на порту 27017 и сохраняет данные в каталоге / data / db.

Если установлено dbPath, mongodb будет использовать каталог, указанный в dbPath

По умолчанию MongoDB прослушивает подключения от клиентов на порту 27017 и сохраняет данных в каталоге / data / db.

Вы должны найти местоположение в файле конфигурации: /etc/mongod.conf

grep dbPath /etc/mongod.conf

Согласно mongodb docs:

Значение по умолчанию путь /data/db directory

По умолчанию MongoDB прослушивает подключения от клиентов на порту 27017 и сохраняет данные в каталоге / data / db.

Если установлено dbPath, mongodb будет использовать каталог, указанный в dbPath

По умолчанию MongoDB прослушивает подключения от клиентов на порту 27017 и сохраняет данных в каталоге / data / db.

Я нашел /etc/mongod.conf (обратите внимание, что буквы «b» нет). Там говорится: storage: dbPath: / var / lib / mongodb. И эта папка выглядит так, как будто это база данных. Также переменной является dbPath (верхний регистр «P»). Но почему, черт возьми, когда я начинаю mongod, он говорит dbpath = / data / db? – croraf 3 December 2017 в 12:00 Благодаря! Проблема заключается в выводе команды mongod «MongoDB start: pid = 2722 port = 27017 dbpath = / data / db 64-bit host = korisnik-Lenovo-Y520-15IKBN» что dbpath является / data / db. Хотя это может быть путь по умолчанию, команда запуска db должна указывать фактический путь, в моем случае / var / lib / mongodb. – croraf 3 December 2017 в 12:38 @Stennie Да, кажется, что mongodb запускается при загрузке ОС (что вы называете «услугой»). Это меня смутило. Я проверю сегодня, но, вероятно, запуск mongod дает ошибку, что порт уже связан. – croraf 4 December 2017 в 13:20

Вы должны найти местоположение в файле конфигурации: /etc/mongod.conf

Путь по умолчанию - /data/db directory

По умолчанию MongoDB прослушивает подключения от клиентов на порту 27017 и сохраняет данные в каталоге / data / db.

Если установлено dbPath , mongodb будет использовать каталог, указанный в dbPath

Если вы хотите mongod хранить файлы данных по пути, отличному от /data/db вы можете указать dbPath . Перед началом mongod должен существовать dbPath . Если он не существует, создайте каталог и разрешения, чтобы mongod мог читать и записывать данные на этот путь. Дополнительные сведения о разрешениях см. В документации по безопасности.

Вы должны найти местоположение в файле конфигурации: /etc/mongod.conf

Путь по умолчанию - /data/db directory

По умолчанию MongoDB прослушивает подключения от клиентов на порту 27017 и сохраняет данные в каталоге / data / db.

Если установлено dbPath , mongodb будет использовать каталог, указанный в dbPath

Если вы хотите mongod хранить файлы данных по пути, отличному от /data/db вы можете указать dbPath . Перед началом mongod должен существовать dbPath . Если он не существует, создайте каталог и разрешения, чтобы mongod мог читать и записывать данные на этот путь. Дополнительные сведения о разрешениях см. В документации по безопасности.

Вы должны найти местоположение в файле конфигурации: /etc/mongod.conf

Путь по умолчанию - /data/db directory

По умолчанию MongoDB прослушивает подключения от клиентов на порту 27017 и сохраняет данные в каталоге / data / db.

Если установлено dbPath , mongodb будет использовать каталог, указанный в dbPath

Если вы хотите mongod хранить файлы данных по пути, отличному от /data/db вы можете указать dbPath . Перед началом mongod должен существовать dbPath . Если он не существует, создайте каталог и разрешения, чтобы mongod мог читать и записывать данные на этот путь. Дополнительные сведения о разрешениях см. В документации по безопасности.

Вы должны найти местоположение в файле конфигурации: /etc/mongod.conf

Путь по умолчанию - /data/db directory

По умолчанию MongoDB прослушивает подключения от клиентов на порту 27017 и сохраняет данные в каталоге / data / db.

Если установлено dbPath , mongodb будет использовать каталог, указанный в dbPath

Если вы хотите mongod хранить файлы данных по пути, отличному от /data/db вы можете указать dbPath . Перед началом mongod должен существовать dbPath . Если он не существует, создайте каталог и разрешения, чтобы mongod мог читать и записывать данные на этот путь. Дополнительные сведения о разрешениях см. В документации по безопасности.

Вы должны найти местоположение в файле конфигурации: /etc/mongod.conf

Путь по умолчанию - /data/db directory

По умолчанию MongoDB прослушивает подключения от клиентов на порту 27017 и сохраняет данные в каталоге / data / db.

Если установлено dbPath , mongodb будет использовать каталог, указанный в dbPath

Если вы хотите mongod хранить файлы данных по пути, отличному от /data/db вы можете указать dbPath . Перед началом mongod должен существовать dbPath . Если он не существует, создайте каталог и разрешения, чтобы mongod мог читать и записывать данные на этот путь. Дополнительные сведения о разрешениях см. В документации по безопасности.

Вы должны найти местоположение в файле конфигурации: /etc/mongod.conf

Путь по умолчанию - /data/db directory

По умолчанию MongoDB прослушивает подключения от клиентов на порту 27017 и сохраняет данные в каталоге / data / db.

Если установлено dbPath , mongodb будет использовать каталог, указанный в dbPath

Если вы хотите mongod хранить файлы данных по пути, отличному от /data/db вы можете указать dbPath . Перед началом mongod должен существовать dbPath . Если он не существует, создайте каталог и разрешения, чтобы mongod мог читать и записывать данные на этот путь. Дополнительные сведения о разрешениях см. В документации по безопасности.

Вы должны найти местоположение в файле конфигурации: /etc/mongod.conf

Путь по умолчанию - /data/db directory

По умолчанию MongoDB прослушивает подключения от клиентов на порту 27017 и сохраняет данные в каталоге / data / db.

Если установлено dbPath , mongodb будет использовать каталог, указанный в dbPath

Если вы хотите mongod хранить файлы данных по пути, отличному от /data/db вы можете указать dbPath . Перед началом mongod должен существовать dbPath . Если он не существует, создайте каталог и разрешения, чтобы mongod мог читать и записывать данные на этот путь. Дополнительные сведения о разрешениях см. В документации по безопасности.

Вы должны найти местоположение в файле конфигурации: /etc/mongod.conf

Путь по умолчанию - /data/db directory

По умолчанию MongoDB прослушивает подключения от клиентов на порту 27017 и сохраняет данные в каталоге / data / db.

Если установлено dbPath , mongodb будет использовать каталог, указанный в dbPath

Если вы хотите mongod хранить файлы данных по пути, отличному от /data/db вы можете указать dbPath . Перед началом mongod должен существовать dbPath . Если он не существует, создайте каталог и разрешения, чтобы mongod мог читать и записывать данные на этот путь. Дополнительные сведения о разрешениях см. В документации по безопасности.

Мой хост пришел с экземпляром mongodb, и в нем нет каталога / db, так что теперь мне интересно, что я могу сделать, чтобы узнать, где на самом деле хранятся данные.

Существует более свежий вопрос по этому вопросу, который дает лучший ответ: «Какой путь к базе данных по умолчанию для mongodb?» , Путь к данным будет либо по умолчанию /data/db (если файл конфигурации не используется), либо будет обнаружен через db.adminCommand("getCmdLineOpts").parsed.dbpath . на OSX, mongo 3.0.4, я должен был использовать "db.adminCommand (" getCmdLineOpts "). parsed.storage.dbPath" @Stennie ваш комментарий помог мне (я на Windows, поэтому я использую Robomongo), но ваша ссылка на вопрос указывает на этот вопрос, а не на намеченную цель - stackoverflow.com/a/12738557/112764 - и в 3.х, это на самом деле db.adminCommand("getCmdLineOpts").parsed.storage.dbpath @NateJ Спасибо! Ответ на соответствующий вопрос есть примеры для MongoDB 2.6+, а также старую форму в <= 2.4. Есть также помощник по оболочке, который вы можете использовать вместо того, чтобы помнить о необходимости изменения admin базы данных или использовать adminCommand : db.serverCmdLineOpts().parsed.storage.dbPath (MongoDB 2.6+).

mongod по умолчанию расположение базы данных равно /data/db/ .

Если вы запустите ps -xa | grep mongod и не увидите, --dbpath что явно указывает mongod на просмотр этого параметра для местоположения БД, а у вас нет dbpath в нем mongodb.conf , то местоположением по умолчанию будет: /data/db/ и вы должны посмотреть там.

@ user2384994 шахта была расположена в /etc/mongod.conf Не видел пути, но /usr/bin/mongod -f /etc/mongod.conf . Взял dbpatch из конфига. Проверьте /usr/local/etc/mongod.conf (файл конфигурации) и /usr/local/var/mongodb (местоположение базы данных), а также. В некоторых системах это будут значения по умолчанию.

Что говорит ваш файл конфигурации?

Если это не правильно, попробуйте это, ваши файлы базы данных будут присутствовать в списке:

Он установлен /var/lib/mongodb/* по умолчанию (Ubuntu 11.04).

Обратите внимание, что для удобства имеется также /var/lib/mongodb/mongod.lock файл с mongod PID, однако он находится в каталоге данных, который мы ищем .

На этом сервере нет каталога / var / lib, и эти две команды не работают (первая не может найти /etc/mongodb.conf, вторая - нераспознанная lsof) Может быть, вы должны добавить информацию для вашего хоста. Не похоже на Ubuntu, как дистрибутив. На Ubuntu 16.04 mongodb v3.4.10 это $ grep dbPath /etc/mongod.conf

В более новой версии mongodb v2.6.4 попробуйте:

Это даст вам что-то вроде этого:

И там хранятся данные.

Мой был здесь также. Для людей, которые хотели найти этот каталог, чтобы проверить размеры файлов: du -sh * | sort -hr

Я нахожу db.serverCmdLineOpts() наиболее надежный способ найти фактический путь, если вы можете подключиться к серверу. «Parsed.storage.dbPath» содержит путь, используемый вашим сервером в настоящее время, и доступен как в случае его использования в конфигурации, так и в аргументах командной строки.

Также в моем случае было важно убедиться, что значение config отражает фактическое значение (т. Е. Config не изменилось после последнего перезапуска), что не гарантируется предлагаемыми здесь решениями.

Работал как шарм! Спасибо, и это должно быть проголосовано :)

Хотя этот вопрос предназначен для Linux / Unix экземпляров Mongo, он является одним из первых результатов поиска независимо от используемой операционной системы, поэтому для будущих пользователей Windows, которые найдут это:

Если MongoDB настроен в качестве службы Windows по умолчанию, его обычно можно найти, посмотрев запись «Путь к исполняемому файлу» в свойствах службы MongoDB:

Окно свойств, отображающее параметр «Путь к исполняемому файлу»

@ st78 Я знаю, но это все еще один из первых результатов поиска Google при поиске местоположения в Windows, поэтому я оставил ответ, касающийся пути Windows (как только я его выяснил), для таких людей, как я, которые наткнулись на него.

По моему опыту, расположение по умолчанию /var/lib/mongodb после того, как я

Я могу подтвердить это для пользователей Linux Mint 17.3.

Я нашел мой здесь в системе OSX / usr / local / var / mongodb

Вопрос в том, «Как я могу найти» место хранения данных mongodb. не просто путь для конкретного пользователя или платформы.

Для Windows Перейдите в папку MongoDB \ Server \ 4.0 \ bin и откройте файл mongod.cfg в любом текстовом редакторе. Затем найдите строку, которая указывает параметр dbPath. Линия выглядит примерно так

dbPath: D: \ Program Files \ MongoDB \ Server \ 4.0 \ data

Нашел это, просто ковыряясь в /var/db . Спасибо за помощь, хотя - я уверен, что эти ответы применимы к другим системам (например, Ubuntu) и помогут другим!

Если бы вы могли как-то найти mongod.log и сделать над ним grep

Значение для dbpath является местоположением данных для mongodb !! Всего наилучшего :)

На самом деле каталог по умолчанию, в котором экземпляр mongod хранит свои данные,

/data/db в Linux и OS X,

\data\db в Windows

Если вы установили MongoDB с помощью системы управления пакетами , проверьте /etc/mongod.conf файл, предоставленный вашими пакетами, чтобы увидеть, что каталог указан.

storage.dbPath Параметр доступен только для mongod .

Сценарии инициализации пакета Linux не ожидают storage.dbPath изменений по умолчанию. Если вы используете пакеты Linux и меняете их storage.dbPath , вам придется использовать собственные сценарии инициализации и отключить встроенные сценарии.

Когда вы запускаете его, он показывает вам. Но я не знаю, можете ли вы это сделать на своем хосте. Если у вас есть доступ к командной строке и вы можете перезапустить службу, вы получите что-то вроде:

Читайте также: