2016-02-07 7 views
0

Когда я спасаю документы в monogdb, получить следующую ошибкуWriteConcern обнаружил ошибку в mognodb

"{WriteConcern detected an error 'bad offset:0 accessing file:xxxx - consider 
repairing database'. (Response was { \"err\" : \"bad offset:0 accessing file: 
    xxxxx - consider repairing database\", \"code\" : 13440, \"n\" : 0, 
\"connectionId\" : 13, \"ok\" : 1.0 }).}" 

любая помощь, пожалуйста,

+0

Вы пытались восстановить базу данных? – Raf

ответ

1

Как говорится об ошибках, база данных требует ремонта, потому что она находится в inconsistent state из-за какой-либо операции, вызванной unexpected shutdown.

В MongoDB WriteConcern обеспечивает обратную связь/подтверждение в ответ на операцию записи. Существует несколько уровней WriteConcerns или гарантирует, что операция записи была успешной или нет. В WriteConcerns уровни являются следующие: (. Клиент ждет успех или исключения АСК записи оп)

  1. подтверждён (клиент не ожидает подтверждения записи оп)
  2. ПРИЗНАВАЕМЫХ
  3. Journaled (MongoDB посылает только подтверждение после совершения записи в журнале)
  4. реплики Подтверждено (извед. от записи оп на первичной и/или других членов набора реплик)

Вы можете установить уровни WriteConcerns на любой уровень в зависимости от важности операции записи.

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

  1. Via MongoDB оболочки (если вы можете подключиться к MongoDb)
  2. через командную строку с mongod см ниже

Если вы можете получить в MongoDB оболочку, то вам нужно найти базу данных и ремонт она, как следовать

use dbName 
db.repairDatabase() //repairs the above database 

Если вы не можете получить в MongoDB оболочки или хотите использовать другой метод, то вы можете использовать следующие методы

файлы Ремонт данных и сохранить исходные файлы

mongod --dbpath /data/db --repair --repairpath /data/db0 
mongod --dbpath /data/db0 

После первой команды над полным, недавно отремонтированные данные будут находиться под /data/db0 каталога, и вы можете использовать вторую команду, чтобы начать MongoDB используя восстановленные данные. Исходные файлы данные сохраняются в стандартном /data/db или другое месте (если не по умолчанию)

файлов Ремонт данных без сохранения исходных файлов

Этого метода вы только поставить --repair и не --repathpath и он будет пытаться восстановить исходные файлы данных.Во-первых, вы должны удалить файл mongod.lock, шаги являются следующие:

rm /data/db/mongod.lock 

Если предположить, что данные в/данных/директории БД, если не указать местоположение.

mongod --dbpath/данные/дб --repair

Start mongod только --repair вариант, вы не должны пройти --repairpath вариант. Это попытается восстановить данные. Тогда, наконец, запустить базу данных

mongod --dbpath/данные/дб

Если следовать первому методу ремонта, то вы можете удалить mongod.lock после ремонта успешен. Если вы следуете второму методу, вы можете удалить его mongod.lock перед выполнением операции восстановления.

Прочтите documentation как безопасно завершить работу базы данных, что находится в mongod.lock? Как вы должны выполнить ремонт (например, запустить его с тем же пользователем, чтобы сохранить право собственности на файл). Также возможно, что разрешения на ваши файлы данных были изменены, вы можете вернуть их обратно, см. Это question для получения более подробной информации.