Mongodb где хранятся файлы баз данных
Перед тем, как углубиться в то, как 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:
По моему опыту, расположение по умолчанию /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 , вам придется использовать собственные сценарии инициализации и отключить встроенные сценарии.
Когда вы запускаете его, он показывает вам. Но я не знаю, можете ли вы это сделать на своем хосте. Если у вас есть доступ к командной строке и вы можете перезапустить службу, вы получите что-то вроде:
Читайте также: