Oprava MongoDB na Linuxovém serveru, začněte kontrolou stavu služby a protokolů, ověřte místo na disku a oprávnění, ověřte soubor mongod.conf a vyřešte problémy s portem, SELinux/AppArmor nebo autorizací.
Pokud jsou data poškozená, obnovte je ze zálohy nebo opatrně použijte příkaz –repair. Postupujte podle níže uvedených kroků k bezpečné diagnostice a vyřešení většiny chyb MongoDB. Pokud vás zajímá, jak opravit MongoDB v prostředích linuxových serverů (Ubuntu, Debian, CentOS, AlmaLinux, Rocky), tento podrobný návod vás provede přesnými kontrolami a příkazy, které používám v produkčním prostředí.
Diagnostikujeme selhání při spouštění, chyby oprávnění, problémy s WiredTiger, konflikty portů, problémy s replikací/autentizací a úzká místa výkonu pomocí bezpečných a osvědčených metod.
Než začnete: Bezpečnost a kontext

Problémy s MongoDB sahají od jednoduchých chybných konfigurací služeb až po poškození úložiště. Vždy upřednostňujte bezpečnost dat.
- Před opravou nebo upgradem si vytvořte nedávnou zálohu nebo snímek systému.
- Znát zdroj instalace (oficiální balíčky MongoDB vs. balíčky komunitní distribuce).
- Název služby je obvykle
mongod; konfigurační soubor se často nachází na adrese/etc/mongod.confdata se nacházejí v/var/lib/mongo.
Krok 1: Zkontrolujte stav služby a protokoly
Začněte s protokoly systemd a MongoDB. Většina problémů „MongoDB se nepodařilo spustit“ je tam vysvětlena.
# Status and last errors
sudo systemctl status mongod --no-pager
sudo journalctl -u mongod -xe --no-pager
# MongoDB's own log (path may vary per config)
sudo tail -n 200 /var/log/mongodb/mongod.log
# or
sudo tail -n 200 /var/log/mongod/mongod.log
Poznamenejte si všechny chyby, jako například „EADDRINUSE“ (port je používán), „Oprávnění odepřeno“, zprávy WiredTiger nebo selhání při analýze konfigurace.
Krok 2: Ověření základů prostředí
Místo na disku, paměť a deskriptory souborů
df -h
free -m
ulimit -n
# Increase temporarily for current shell if too low (< 64000 often problematic)
ulimit -n 64000
MongoDB potřebuje dostatečné místo na disku, paměť a otevřené soubory. Nedostatek zdrojů může zabránit spuštění nebo způsobit pády.
Potvrzení verze a binárních souborů
mongod --version
mongo --version # or mongosh --version
Smíšené verze binárních souborů a datových souborů nebo částečné aktualizace mohou narušit spuštění. Pokud používáte oficiální repozitář MongoDB, balíček je obvykle mongodb-org.
Krok 3: Ověření souboru mongod.conf
Jedna chybně zadaná hodnota /etc/mongod.conf může zabránit spuštění MongoDB. Potvrďte syntaxi YAML, cesty a nastavení sítě.
# Common locations
sudo nano /etc/mongod.conf
# Typical fields
# storage:
# dbPath: /var/lib/mongo
# journal:
# enabled: true
# systemLog:
# destination: file
# path: /var/log/mongodb/mongod.log
# logAppend: true
# net:
# port: 27017
# bindIp: 127.0.0.1,10.0.0.5
# security:
# authorization: enabled
# replication:
# replSetName: rs0
- cesta_db existuje a je vlastněn uživatelem MongoDB.
- bindIp obsahuje správné IP adresy. Pro vzdálený přístup přidávejte soukromou/veřejnou IP adresu serveru opatrně.
- přístav není v rozporu.
- povolení odpovídá vašemu uživatelskému nastavení.
- replikace Název sady je konzistentní napříč uzly.
Krok 4: Oprava oprávnění k souborům a adresářům
# Ubuntu/Debian often uses user:group 'mongodb'
sudo chown -R mongodb:mongodb /var/lib/mongo /var/log/mongodb
sudo chmod 700 /var/lib/mongo
sudo chmod 640 /var/log/mongodb/mongod.log
# RHEL/CentOS/Alma/Rocky often uses 'mongod'
sudo chown -R mongod:mongod /var/lib/mongo /var/log/mongodb
Chyby oprávnění jsou časté. Zajistěte, aby uživatel služby MongoDB mohl zapisovat do adresářů databáze a protokolů.
Krok 5: Řešení konfliktů portů a soketů
Pokud je port 27017 již používán, MongoDB se nespustí.
sudo ss -ltnp | grep 27017
# or
sudo netstat -ltnp | grep 27017
# Kill stale processes carefully:
sudo kill -9 <PID>
Případně změňte net.port in mongod.conf a odpovídajícím způsobem aktualizovat pravidla firewallu.
Krok 6: Zkontrolujte firewall, SELinux a AppArmor
Pravidla brány firewall
# firewalld (RHEL family)
sudo firewall-cmd --add-port=27017/tcp --permanent
sudo firewall-cmd --reload
# UFW (Ubuntu/Debian)
sudo ufw allow 27017/tcp
Používejte seznamy povolených: omezit vzdálený přístup na interní IP adresy nebo důvěryhodné hostitele.
SELinux (rodina RHEL)
# Temporarily set permissive (for testing only)
sudo setenforce 0
# Properly label data path and allow port
sudo semanage port -a -t mongod_port_t -p tcp 27017 || true
sudo chcon -R -t mongod_var_lib_t /var/lib/mongo
AppArmor (Ubuntu)
Pokud AppArmor blokuje přístup k souborům, upravte profil pro Mongod nebo jej dočasně deaktivujte pro testování. Poté jej znovu povolte se správnými povolenými hodnotami.
Krok 7: Bezpečná manipulace s WiredTiger a poškozením dat
Chyby jako „WiredTiger.turtle není platný“ nebo „zjištěno poškození“ naznačují problémy s úložištěm. Nejbezpečnější cestou je obnovení ověřených záloh nebo opětovná synchronizace ze zdravého člena sady replik.
- Nejlepší praxe: Obnovení ze zálohy nebo resynchronizace z jiného uzlu.
- Poslední možnost: Použijte
--repairna zastavené službě (může být pomalá a může vést ke ztrátě dat).
# Stop service
sudo systemctl stop mongod
# Run repair with the same dbPath
sudo -u mongodb mongod --config /etc/mongod.conf --repair
# or
sudo -u mongod mongod --config /etc/mongod.conf --repair
# Start service
sudo systemctl start mongod
Pokud oprava opakovaně selže, obnovte ji ze zálohy nebo proveďte počáteční synchronizaci v sadě replik.
Krok 8: Oprava problémů s ověřováním a klíčovým souborem
Kdy authorization: enabled, musíte mít uživatele s oprávněními správce. Pro sady replik s keyFile musí soubor existovat a mít striktní oprávnění (600).
# Example: create admin user (do this only once, when you can auth locally)
mongosh --port 27017
use admin
db.createUser({ user: "siteAdmin", pwd: "STRONG_PASSWORD", roles: ["root"] })
# KeyFile permissions (replica sets)
sudo chown mongod:mongod /etc/mongod.keyfile
sudo chmod 600 /etc/mongod.keyfile
Krok 9: Oprava běžných chyb konfigurace
- Nesprávná bindIp: Použijte
127.0.0.1pouze pro lokální přístup; pro vzdálený přístup přidejte IP adresu serveru. Vyhněte se0.0.0.0na veřejných serverech bez pravidel firewallu. - Neplatné cesty: Zajistit
dbPatha cesta k protokolu existuje a shoduje se s oprávněními. - Neshoda replikační sady: Všechny uzly musí používat stejný
replSetNamea být schopni se navzájem spojit přes síť. - Odsazení YAML: Jedna chyba mezery může přerušit analýzu. Ověřte pomocí
yamllintV případě potřeby.
Krok 10: Přeinstalace nebo upgrade bez ztráty dat
Pokud jsou balíčky poškozené, znovu je nainstalujte z oficiálního repozitáře MongoDB bez zásahu do adresáře s daty. Před změnou balíčků vždy proveďte zálohu.
# Ubuntu/Debian: Add MongoDB official repo (example for 6.0; adjust for your distro)
# See mongodb.com/docs/manual/tutorial/install-mongodb-on-ubuntu/
# Install/repair packages
sudo apt-get update
sudo apt-get install -y mongodb-org
# RHEL/CentOS/Alma/Rocky
sudo yum install -y mongodb-org
# or
sudo dnf install -y mongodb-org
# After reinstall, start and enable
sudo systemctl enable --now mongod
Aktualizace napříč hlavními verzemi může vyžadovat specifickou cestu aktualizace. Před pokračováním si prostudujte poznámky k verzi MongoDB, abyste zjistili kompatibilitu a zálohu.
Také čtení: Oprava Dockeru na Linuxovém serveru – Průvodce obnovou Dockeru
Řešení problémů podle příznaků
„Mongod se nepodařilo spustit“
- Kontrola
journalctl -u mongodamongod.logpro přesný řetězec chyb. - Ověřte oprávnění
/var/lib/mongoa/var/log/mongodb. - Potvrďte syntaxi a hodnoty YAML v
/etc/mongod.conf. - Ujistěte se, že port 27017 je volný, firewall povoluje provoz a SELinux/AppArmor povoluje přístup.
- Ověřte místo na disku a RAM dostupnost.
„EADDRINUSE“ (Port je používán)
- Najděte konfliktní proces s
ssornetstata zastavit ho, nebo změnit port MongoDB. - Odstraňte zastaralé soubory zámků/socketů v
/tmppokud je to relevantní po zajištění, že nezbývá žádná spuštěná instance.
Korupce WiredTiger
- Upřednostnit obnovení nebo resynchronizaci repliky před
--repair. - Pokud je nutné provést opravu, zastavte službu a spusťte ji
mongod --repairse správnou konfigurací.
Selhání ověření
- Ujistěte se, že administrátorský uživatel existuje a že používáte správné přihlašovací údaje.
- U replikačních sad musí keyFile existovat na všech uzlech s identickým obsahem a režimem 600.
Pomalý výkon nebo vysoký počet I/O operací
- Zkontrolujte pomalé dotazy pomocí profileru a přidejte příslušné indexy.
- Zajistěte dostatečný počet IOPS úložiště a RAM pro vaši pracovní sadu.
- Navýšit
ulimit -n, zakažte transparentní obrovské stránky (THP) a zvažte nastavení NUMA.
Příklad: Čistý, minimalistický soubor mongod.conf
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
processManagement:
fork: false
net:
port: 27017
bindIp: 127.0.0.1
security:
authorization: enabled
# replication:
# replSetName: rs0
Začněte lokálně pouze se zpětnou smyčkou, ověřte, zda běží, a poté podle potřeby přidejte externí IP adresy a nastavení replikace se správným firewallem.
Kdy eskalovat nebo vyhledat pomoc
Pokud protokoly ukazují na přetrvávající poškození, opakované pády nebo složité problémy se sadou replik, zvažte odbornou pomoc. YouStableNaši linuxoví a databázoví inženýři mohou auditovat váš stack, opravit MongoDB na úrovni operačního systému a konfigurace, obnovit výkon a nastavit zálohy a monitorování, aby vaše úlohy zůstaly spolehlivé.
Tipy od profesionálů z reálných operací
- Vždy si přečtěte první fatální chybu v souboru mongod.log. Pozdější chyby se často hromadí.
- Automatizujte zálohování a testovací obnovení každý měsíc. Zvláště před upgrady.
- Ponechte operační systém a MongoDB na podporovaných verzích. Stará jádra nebo souborové systémy mohou způsobovat neobvyklé chyby.
- Oddělte data a protokoly na výkonné disky. Latence souborového systému snižuje propustnost.
- Monitor s upozorněními. Používejte metriky pro disk, RAM, připojení, zpoždění replikace a čítače operací.
Závěrečný kontrolní seznam: Postup rychlé opravy
- systemctl a protokoly: identifikovat přesnou chybu.
- Disk, paměť, limit: zajistit dostatečné zdroje.
- Oprávnění a cesty: Oprava vlastnictví dbPath/log.
- Konfigurace: ověřit YAML, bindIp, port, autorizaci a replSetName.
- Síť: firewall, pravidla SELinuxu/AppArmor.
- Integrita dat: preferovat obnovení/resynchronizaci; použít
--repairopatrně. - Pokud jsou balíčky poškozené, přeinstalujte/upgradujte z oficiálních repozitářů.
Nejčastější dotazy
Proč se MongoDB po restartu nespustí?
Mezi běžné příčiny patří chybějící připojení disků, změněná oprávnění na /var/lib/mongo, konflikty portů nebo opětovné vynucování zásad ze strany SELinux/AppArmor. Zkontrolujte systemctl status mongod, journalctl -u mongod, ověřte připojení a oprávnění a potvrďte, že nastavení firewallu/SELinuxu přežila restart.
Jak zkontroluji protokoly MongoDB v Linuxu?
Použijte journalctl -u mongod -xe pro zprávy na úrovni služeb a obvykle sledování vlastního protokolu MongoDB /var/log/mongodb/mongod.logPřesná cesta je nakonfigurována v /etc/mongod.conf pod systemLog.path.
Je bezpečné spustit mongod –repair?
Pouze jako poslední možnost. --repair může být pomalé a může dojít k zahození dat. Upřednostňujte obnovení ze záloh nebo synchronizaci z funkčního člena sady replik. Pokud budete pokračovat, zastavte službu, zálohujte datový adresář a spusťte opravu se správnou konfigurací.
Jak opravím chybu „Neoprávněno“ po povolení ověřování?
Před povolením nejprve vytvořte administrátorského uživatele authorization: enabled, nebo dočasně zakažte ověřování a vytvořte jej. Poté se připojte s přihlašovacími údaji správce. V replikačních sadách se ujistěte, že je keyFile přítomen na všech uzlech s režimem 600 a identickým obsahem.
Jaký je nejrychlejší způsob, jak bezpečně otevřít MongoDB ve vzdálené aplikaci?
Přidejte IP adresu svého aplikačního serveru do bindIp, povolte TCP 27017 pouze z dané IP adresy přes firewall, ponechte ověřování zapnuté a používejte silné uživatelské přihlašovací údaje s co nejnižšími oprávněními. Zabraňte vystavení 27017 celému internetu.