Pouze pro návštěvníky našeho blogu Získejte další 3 měsíce zdarma + 10% slevu na tříletý plán YSBLOG10
Chyťte dohodu

Jak opravit MongoDB na Linuxovém serveru bez ztráty dat

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

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 --repair na 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.1 pouze pro lokální přístup; pro vzdálený přístup přidejte IP adresu serveru. Vyhněte se 0.0.0.0 na veřejných serverech bez pravidel firewallu.
  • Neplatné cesty: Zajistit dbPath a cesta k protokolu existuje a shoduje se s oprávněními.
  • Neshoda replikační sady: Všechny uzly musí používat stejný replSetName a 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í yamllint V 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 mongod a mongod.log pro přesný řetězec chyb.
  • Ověřte oprávnění /var/lib/mongo a /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 ss or netstat a zastavit ho, nebo změnit port MongoDB.
  • Odstraňte zastaralé soubory zámků/socketů v /tmp pokud 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 --repair se 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 --repair opatrně.
  • 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.

Sdílet přes:

Sanjeet Chauhan

Sanjeet Chauhan je bloger a SEO expert, který se věnuje pomoci webovým stránkám s organickým růstem. Sdílí praktické strategie, užitečné tipy a poznatky pro zvýšení návštěvnosti, zlepšení pozic ve vyhledávání a maximalizaci online přítomnosti.

Zanechat komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

Přejděte na začátek