Nick
что значит условный
То что если явно в авайт/промис не обернуть и не добавить ожидание завершения всех запросов, то форич будет итеративно идти по массиву
Elvee
Alexander
Можно. Но зачем нам волюм ради 1 файла?)
Как минимум для того, чтобы файл ключа был привязан к окружению развертывания, а не был одним на все контейнеры, поднимаемые из образа.
Elvee
Как минимум для того, чтобы файл ключа был привязан к окружению развертывания, а не был одним на все контейнеры, поднимаемые из образа.
Хм… нужно подумать. Мне например этот файл нужен будет и на других репликах. Получается будет 1 волюм на 1 контейнер. 3 волюма и 3 одинаковых файла на них
Alexander
Хм… нужно подумать. Мне например этот файл нужен будет и на других репликах. Получается будет 1 волюм на 1 контейнер. 3 волюма и 3 одинаковых файла на них
Иначе любой, получивший доступ образу, сразу из коробки получает ключ от всех поднятых в контейнерах экземпляров монги. Ну, Вам, конечно, виднее. Может инфраструктура так выстроена, что это не критично.
Elvee
Всем привет! При запуске монги в режиме реплик. Должен ли я видеть одни и те же документы при разных подключениях? в моем случае у меня 2 монги поднялось 27017 и 27018. Если я добавляю документ в 27017 то в 27018 он не отображается
Elvee
Elvee
ну и мой докер
Elvee
только сейчас увидел что не могу подключиться к репликам... getaddrinfo ENOTFOUND mongo2
Thunder
Кто знает как в 6-той монге включить verbose для mongosh? это возможно? хочу наблюдать за операциями. монга в докер контейнере, docker exec -it mongodb mongosh —verbose не помогает
Thunder
раньше было setVerboseShell(true) , но сейчас его нет
Ildar
всем добрый день. Подскажите как правильно делать физический бекап на MongoDB ?
Ildar
Это логический бекап А меня интересует физический
Ildar
чтото типа pg_basebackup но для mongo
Nick
Это логический бекап А меня интересует физический
Чем отличается физический от логического?
Ildar
Чем отличается физический от логического?
Mongodump выгружает данные в формат, отличный от формата хранения в файлах данных. Это получается логический бэкап. Физический - это такой, когда при восстановлении, например, не нужно индексы перестраивать, когда после восстановления файлы данных блок в блок соответствуют файлам на момент бэкапа. В оракловой аналогии mongodump - это exp, в mysql - это mysqldump. Эти утилиты выгружают код для пересоздания объектов и данных, т.е. делают логический бэкап. Интересует аналог ораклового RMAN для mongodb, т.е. такая штука (если такая существует), которая резервирует блоки файлов данных в горячем режиме.
Ildar
Это из интернетов
Ildar
хотелка как раз не странная. Но если готовых инструментов нет. То буду делать скрипты.
Vadim
хотелка как раз не странная. Но если готовых инструментов нет. То буду делать скрипты.
если я не ошибаюсь то https://docs.percona.com/percona-backup-mongodb/index.html , видимо то что Андрей имел ввиду
Андрей
Да, но оно работает только с их дистрибутивом и только с реплика сет.
Андрей
Там тебе и инкременталка и хот бэкап.
yopp
Vitalik
Всем привет! Подскажите пожалуйста: как только добавляю мету для документа - падает приложение. Если ее закомментировать - все ок. Пробовал и удалять коллекцию, все равно при создании умирает. При этом абсолютно такая же история в соседней коллекции работает нормально.
Vik II
ребята, вопрос, есть есть клиенты и фермеры, как назвать их в бд, client & farmer или user & farmer ?
Alexey
ребята, вопрос, есть есть клиенты и фермеры, как назвать их в бд, client & farmer или user & farmer ?
Очевидно же: если это клиенты, то clients, а если пользователи, то users
Thunder
users.role[client, farmer, admin, manager, etc.]
Ildar
Можно ли штатными средствами монги делать pitr бекап?
Андрей
Ванильная монго на уровне своих бинарников не умеет в инкременталку. Нет инкременталки - можно забыть про питр.
Андрей
Можно дампить реплику с оплогом, но ниче общего с задачей это не имеет. 2ТБ коллекция условно и точка актуальности уже ~ сутки например.
Андрей
Берите дистрибутив перконы или используйте другие сторонние дамп движки для этого.
Ildar
База не большая
Андрей
Ну всё относительно. Я хадупы админю. Для меня 2ТБ - небольшая 😉
Андрей
В любом случае, если важна маленькая точка актуальности самого дампа, то дефолтный фул дамп с оплогом не подходит, а там смотрите по своему. Если у вас крашнулся кластер и следующий дамп, в котором находится та инфа, на которую надо восстановиться, тупо не сделался из-за этого, то как бы на этом полномочия всё 😄
Ildar
Всем привет. Подскажите, плиз, как вообще работает oplog? Не могу понять... Сначала делаю фулл бэкап в директорию backup Затем делаю изменения в бд, и делаю бэкап в директорию backup с флагом --oplog. Появляется файл oplog.bson. Содержимое следующее {"op":"n", "ns":"", "o": "msg":{"periodic noop"}, "ts":{"$timestamp":{"t":1686761275,"i":1}}, "t":{"$numberLong":"6"}, "v":{"$numberLong":"2"}, "wall":{"$date":{"$numberLong":"1686761275306"}}} Затем снова делаю изменения в монге, добавляю бд и коллекции. Запускаю mongodump с флагом —oplog. Файл oplog.bson просто перезатирается и не содержит информации, таймстамп о предыдущем бэкапе. {"op":"n","ns":"", "o":{"msg":"periodic noop"}, "ts":{"$timestamp":{"t":1686764685,"i":1}}, "t":{"$numberLong":"6"}, "v":{"$numberLong":"2"}, "wall":{"$date":{"$numberLong":"1686764685631"}}} Так и должно быть или упускаю какие-то моменты? Для фул бэкапа использую `mongodump --username backup_user --password backuppass12345 --host=rs0/mongodb-home-1:27017,mongodb-home-2:27017,mongodb-home-3:27017 --authenticationDatabase=admin --out=$(hostname)-$(date +%d%m%y)` Для инкрементального `mongodump --username backup_user --password backuppass12345 --host=rs0/mongodb-home-1:27017,mongodb-home-2:27017,mongodb-home-3:27017 --authenticationDatabase=admin --out=$(hostname)-$(date +%d%m%y) --oplog`
вот тут привели пример инкрементального бекапа. Или это не совсем то?
Андрей
Нет. Не умеет монго в инкремент на уровне mongodump.
Андрей
Это будет 2 независимых фул дампа с разным содержимым оплога.
yopp
Можно ли штатными средствами монги делать pitr бекап?
Да, mongodump с ключом oplog https://www.mongodb.com/docs/database-tools/mongodump/#std-option-mongodump.--oplog https://www.mongodb.com/docs/database-tools/mongorestore/#std-option-mongorestore.--oplogReplay В этом случае в бэкапе еще будет часть оплога, которая покрывает диапазон времени от начала до конца работы mongodump Таким образом это слепок кластера в моменте Но как выше ответили, это все равно не позволяет делать инкрементальные бэкапы
Ildar
Ясно
Ildar
А oplog в постоянном режиме можно собирать?
Cheusov Alexandr
Всем привет! А MongoDB где-то хранит информацию по количеству прочитанных/записанных данных в коллекции/индексы?
Cheusov Alexandr
Да, в db.stats() было, пути точно не вспомню
Смотрел, не нашел такой информации. На просторах интернета предлагают использовать python-модуль ebpf, но держать работающий в фоне скрипт... Как по мне неприемлемо
Cheusov Alexandr
Ящик водки
Да
нет
Nick
нет
Неконструктив, давайте уже ссылку
Valeriy
Привет! Подскажите плз, почему explain работает для find, но не работает для aggregate? Я что-то неправильно делаю? Mongodb 6.0.8, DataGrip 2023.2
Valeriy
Valeriy
explain внутри aggregate есть
Если вы про aggregate([...], {explain:1}), то я не понимаю, как туда передать verbosity "executionStats"
Valeriy
https://dzone.com/articles/mongo-aggregates-and-how-to-explain-aggregate-quer
Этот запрос у меня выводит explain, но в нём нет поля executionStats к сожалению
Valeriy
В общем, проблема видимо в самой datagrip или в java-драйвере монги Через mongosh оба запроса возвращают executionStats Пойду багрепорт накатаю
Kenya-West
Всем привет! Почему Монга внутри контейнера создается без базы, без юзера, без коллекции? docker-compose.yml: version: '3.9' services: mongo: image: mongo:6.0 container_name: ord-data-backend-db restart: unless-stopped ports: - '${MONGO_PORT}:27017' healthcheck: test: echo 'db.runCommand('ping').ok' | mongosh localhost:${MONGO_PORT}/test --quiet interval: 10s timeout: 10s retries: 5 start_period: 10s environment: MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} MONGO_INITDB_DATABASE: ${MONGO_DB_NAME} MONGO_INITDB_USER: ${MONGO_DB_ADMIN_USERNAME} MONGO_INITDB_PASSWORD: ${MONGO_DB_ADMIN_PASSWORD} volumes: - ./mongo/db:/data/db - ./mongo/initdb.d/:/docker-entrypoint-initdb.d/ mongo-express: image: mongo-express:0.54.0 container_name: ord-data-backend-db-front restart: unless-stopped ports: - 8081:8081 environment: ME_CONFIG_MONGODB_ADMINUSERNAME: ${ME_CONFIG_MONGODB_ADMINUSERNAME} ME_CONFIG_MONGODB_ADMINPASSWORD: ${ME_CONFIG_MONGODB_ADMINPASSWORD} ME_CONFIG_MONGODB_SERVER: mongo ME_CONFIG_MONGODB_ENABLE_ADMIN: true ME_CONFIG_BASICAUTH_USERNAME: ${MONGO_DB_ADMIN_USERNAME} ME_CONFIG_BASICAUTH_PASSWORD: ${MONGO_DB_ADMIN_PASSWORD} ME_CONFIG_MONGODB_PORT: ${MONGO_PORT} ME_CONFIG_MONGODB_SSL: false depends_on: mongo: condition: service_healthy
Kenya-West
.env.development: MONGO_PORT=27018 MONGO_DB_NAME=ord-data-backend MONGO_INITDB_ROOT_USERNAME=root MONGO_INITDB_ROOT_PASSWORD=p@$$w0rd MONGO_DB_ADMIN_USERNAME=kw MONGO_DB_ADMIN_PASSWORD=p@$$w0rd ME_CONFIG_MONGODB_ADMINUSERNAME=root ME_CONFIG_MONGODB_ADMINPASSWORD=p@$$w0rd init-mongo.js: db = db.getSiblingDB(process.env.MONGO_INITDB_DATABASE); db.createUser({ user: process.env.MONGO_INITDB_USER, pwd: process.env.MONGO_INITDB_PASSWORD, roles: [ { role: 'readWrite', db: process.env.MONGO_INITDB_DATABASE, }, ], }); db.createCollection('data');
Kenya-West
Поднимаю командой: docker-compose -f docker-compose.dev.yml --env-file .env.development up -d И вроде бы всё ок с файлами, но клиент не коннектится к базе. Заходишь в контейнер и mongosh'ем тыкаешься - а базы нет вообще, как и данных. Хотя обязаны были создастся!
Kenya-West
Vladyslav
Добрый день. Почему может быть такая ситуация, подскажите пожалуйста. test_mongo = db_base[collection['mongoDB']].find(query) Не заходит в цикл: for item in test_mongo: Казалось бы, может test_mongo пустой. Но, db_base[collection['mongoDB']].count_documents(query) возвращает не 0
Vladyslav
А пробовал проверить, что в test_mongo ?
Ну, если не переобразовывать в list, то объект курсора Если переобразовать, то список объектов Самое забавное, такое сработало 🗿 for item_2 in db_base[collection['mongoDB']].find(query)
Vladyslav
Вообще не понимаю в чем разница между 2 циклами? Почему во 2й заходит, а в 1й нет? query = {field: {f"${operator}": values}} test_mongo = db_base[collection['mongoDB']].find(query) for item in test_mongo: logger.info(item['id']) for item_2 in db_base[collection['mongoDB']].find(query): logger.info(item_2['id'])
Андрей
всем привет! подскажите плз, у нас есть несколько экземпляров базы. Primary и Secondary можно ли сделать так чтобы вся запись велась через Primary а чтение через Secondary ?
Alexandr
Привет. Подскажите пожалуйта. Есть коллекция, в ней есть поле orderN. В коллекции есть например 10 записей, все orderN имеют значения от 1 до 10, без разрывов. Есть индекс unique на orderN. Хочу атомарно инкрементировать значения orderN, которые например >= 3, но получаю ошибку из-за дубля индекса. Как можно по-другому сделать адекватно? Мой запрос: updateMany({ orderN: { $gte: 3 } }, { $inc: { orderN: 1 } }) Ошибка 11000
Tetra
Привет. Подскажите пожалуйта. Есть коллекция, в ней есть поле orderN. В коллекции есть например 10 записей, все orderN имеют значения от 1 до 10, без разрывов. Есть индекс unique на orderN. Хочу атомарно инкрементировать значения orderN, которые например >= 3, но получаю ошибку из-за дубля индекса. Как можно по-другому сделать адекватно? Мой запрос: updateMany({ orderN: { $gte: 3 } }, { $inc: { orderN: 1 } }) Ошибка 11000
действительно проблема, вообще странная потребность, а апдейт походу здесь делает инкремент поля, обновляет данные в индексе по полю и тут же упирается в то что в индексе уже есть док с таким полем. В вашем случае даже не знаю чего посоветовать, разве что сгонять в их жиру и багрепорт закинуть