Wichtige MongoDB-Verwaltungsbefehle für Einsteiger

Meistern Sie die wesentlichen Verwaltungsbefehle für MongoDB mit der `mongosh`-Shell. Dieser Leitfaden behandelt grundlegende Aufgaben für Einsteiger, darunter das Wechseln von Datenbanken, das Erstellen/Löschen von Collections, die Benutzerverwaltung mit Rollen und wichtige Systemzustandsprüfungen wie `serverStatus`. Lernen Sie die grundlegenden Befehle, die Sie benötigen, um Ihre NoSQL-Umgebung sicher zu verwalten.

Wichtige MongoDB-Verwaltungsbefehle für Einsteiger

Die MongoDB-Verwaltung beginnt in mongosh, aber das Ziel ist nicht, jeden Befehl auswendig zu lernen. Das Ziel ist zu wissen, wie man sich sicher umsieht, bestätigt, wo man ist, kleine Änderungen bewusst vornimmt und zerstörerische Befehle in der falschen Datenbank vermeidet.

Wenn Sie neu bei MongoDB sind, üben Sie diese Befehle zuerst auf einer lokalen Instanz oder einer Wegwerf-Entwicklungsdatenbank. Einige Befehle in diesem Leitfaden, wie dropDatabase() und drop(), entfernen Daten dauerhaft. MongoDB wird tun, was Sie verlangen; es wird nicht wissen, dass Sie den Befehl woanders ausführen wollten.

Verbinden mit mongosh

Für eine lokale MongoDB-Instanz auf dem Standardport verbinden Sie sich mit:

mongosh

Für einen entfernten Server verwenden Sie eine Verbindungszeichenfolge, die Ihnen von Ihrem Administrator oder Hosting-Anbieter zur Verfügung gestellt wird:

mongosh "mongodb://[email protected]:27017/admin"

Für TLS, Replica Sets oder MongoDB Atlas enthält der URI weitere Optionen. Vermeiden Sie es, wenn möglich, Passwörter in den Shell-Verlauf einzufügen. Verwenden Sie Eingabeaufforderungen, umgebungsspezifische Geheimnisverwaltung oder die Anmeldeinformationstools Ihrer Plattform.

Sobald Sie verbunden sind, überprüfen Sie, wo Sie gelandet sind:

db

Das gibt den aktuellen Datenbankkontext aus. Viele Fehler beginnen mit der Annahme, dass die Shell auf eine Datenbank zeigt, während sie auf eine andere zeigt.

Datenbanken auflisten und wechseln

Zeigen Sie sichtbare Datenbanken an:

show dbs

Möglicherweise sehen Sie nicht alle Datenbanken, wenn Ihr Benutzer nicht über die erforderlichen Berechtigungen verfügt. Das ist in gesicherten Umgebungen normal.

Wechseln Sie den Datenbankkontext mit use:

use myAppDB

MongoDB erstellt die Datenbank nicht sofort, wenn Sie use ausführen. Sie wird erstellt, wenn zum ersten Mal Daten geschrieben werden, z. B. wenn Sie ein Dokument einfügen oder explizit eine Collection erstellen.

Überprüfen Sie die aktuelle Datenbank erneut:

db

Bevorzugen Sie für Skripte explizite Datenbank-Handles, damit der Code weniger vom Shell-Kontext abhängt:

const appdb = db.getSiblingDB("myAppDB")
appdb.getCollectionNames()

Collections: auflisten, erstellen, inspizieren, entfernen

Listen Sie Collections in der aktuellen Datenbank auf:

show collections

Oder verwenden Sie JavaScript:

db.getCollectionNames()

Erstellen Sie eine Collection explizit, wenn Sie Optionen wie Validierung, beschränktes Verhalten oder geclusterte/Index-Auswahlen benötigen, die von Ihrer MongoDB-Version unterstützt werden:

db.createCollection("logs")

Die meisten Anwendungs-Collections werden beim ersten Einfügen automatisch erstellt, aber die explizite Erstellung ist für die administrative Einrichtung klarer.

Inspizieren Sie Collection-Statistiken:

db.orders.stats()

Sehen Sie sich Indizes an:

db.orders.getIndexes()

Das Löschen einer Collection ist zerstörerisch:

db.logs.drop()

Bevor Sie es in einer gemeinsamen Umgebung ausführen, bestätigen Sie die Datenbank und Collection:

db
db.getCollectionNames()
db.logs.countDocuments({})

Für sehr große Collections kann countDocuments({}) teuer sein. Verwenden Sie in diesem Fall Metadaten, Stichproben oder operative Dashboards, anstatt während der Hauptverkehrszeit breite Zählungen durchzuführen.

Ein Testdokument einfügen und abfragen

Selbst Administratoren benötigen ein paar CRUD-Grundlagen zur Überprüfung. Fügen Sie ein kleines Dokument ein:

db.healthcheck.insertOne({ source: "admin-test", createdAt: new Date() })

Lesen Sie es zurück:

db.healthcheck.find({ source: "admin-test" }).sort({ createdAt: -1 }).limit(5)

Entfernen Sie nur das Testdokument:

db.healthcheck.deleteMany({ source: "admin-test" })

Verwenden Sie spezifische Filter. Vermeiden Sie breite Löschungen während des Lernens. Ein Befehl wie deleteMany({}) entfernt jedes Dokument in der Collection.

Grundlagen der Benutzerverwaltung

Benutzerbefehle werden gegen die Datenbank ausgeführt, in der der Benutzer definiert ist. Administrative Benutzer werden oft in admin erstellt. Anwendungsbenutzer können je nach Ihrem Sicherheitsmodell in der Anwendungsdatenbank erstellt werden.

Wechseln Sie zu admin:

use admin

Erstellen Sie einen administrativen Benutzer mit einem per Eingabeaufforderung abgefragten Passwort:

db.createUser({
  user: "appAdmin",
  pwd: passwordPrompt(),
  roles: [
    { role: "userAdminAnyDatabase", db: "admin" },
    { role: "readWriteAnyDatabase", db: "admin" }
  ]
})

Verwenden Sie für eine normale Anwendung engere Berechtigungen. Zum Beispiel sollte eine App, die nur myAppDB liest und schreibt, keine breiten Admin-Rollen erhalten:

use myAppDB

db.createUser({
  user: "myAppUser",
  pwd: passwordPrompt(),
  roles: [
    { role: "readWrite", db: "myAppDB" }
  ]
})

Listen Sie Benutzer in der aktuellen Datenbank auf:

show users

Aktualisieren Sie Rollen sorgfältig:

db.grantRolesToUser("myAppUser", [ { role: "read", db: "reporting" } ])

Entfernen Sie Rollen ebenso bewusst:

db.revokeRolesFromUser("myAppUser", [ { role: "read", db: "reporting" } ])

Die sicherste Gewohnheit ist das Prinzip der geringsten Privilegien: Geben Sie dem Benutzer nur die Datenbank und Rolle, die für die Aufgabe benötigt werden.

Serverstatus und aktuelle Operationen

serverStatus gibt ein großes Dokument mit Zählern und Laufzeitinformationen zurück:

db.serverStatus()

Anfänger benötigen normalerweise nicht das gesamte Dokument. Rufen Sie die Abschnitte ab, die Sie interessieren:

db.serverStatus().connections
db.serverStatus().mem
db.serverStatus().opcounters

Aktuelle Operationen können helfen, wenn etwas hängt oder langsam ist:

db.currentOp()

Filtern Sie auf einem stark ausgelasteten Server:

db.currentOp({ active: true, secs_running: { $gte: 5 } })

Beenden Sie Operationen nicht leichtfertig. Wenn Sie eine beenden müssen, inspizieren Sie sie zuerst und verstehen Sie, ob es sich um eine Benutzerabfrage, einen Indexaufbau, ein Backup, eine Migration oder interne Replikationsarbeit handelt.

Replica-Set-Überprüfungen

Wenn Ihre Bereitstellung ein Replica Set ist, sind diese Befehle üblich:

rs.status()
rs.conf()

rs.status() zeigt Mitglieder, Gesundheit, Zustand, Optime-Informationen und welcher Knoten der Primäre ist. Führen Sie es aus, wenn Anwendungen Schreibfehler melden, wenn ein Knoten neu gestartet wurde oder wenn Replikationsverzögerung vermutet wird.

Für eine schnelle Überprüfung der Lese-Präferenz fragen Sie, wer der aktuelle Knoten denkt, dass er ist:

db.hello()

Ältere Beispiele verwenden möglicherweise isMaster(). Neuere MongoDB-Versionen unterstützen hello; Sie können den alten Befehl in vorhandenen Skripten noch sehen.

Gefährliche Befehle verdienen Rituale

Verlangsamen Sie sich bei zerstörerischen Arbeiten. Ein einfaches Ritual verhindert echte Ausfälle:

db
show collections
// Hostname oder Verbindungszeichenfolge in Ihrem Terminal-Prompt oder Notizen bestätigen
// Backup- oder Wiederherstellungsplan bestätigen, wenn dies die Produktion ist
db.collectionName.drop()

Für das Entfernen einer Datenbank:

use databaseToRemove
db.dropDatabase()

Dieser Befehl löscht die aktuelle Datenbank. Die Gefahr liegt nicht in der Syntax; die Gefahr liegt im falschen Kontext.

Eine einsteigerfreundliche Admin-Checkliste

Wenn Sie sich mit einer MongoDB-Umgebung verbinden, gewöhnen Sie sich an diese Sequenz:

db
show dbs
use myAppDB
show collections
db.orders.getIndexes()
db.serverStatus().connections
db.currentOp({ active: true })

Diese Befehle sagen Ihnen, wo Sie sind, was existiert, ob der grundlegende Zugriff funktioniert und ob gerade etwas Offensichtliches passiert.

Die MongoDB-Verwaltung wird viel weniger einschüchternd, wenn Sie mongosh zuerst als Inspektionswerkzeug und dann als Änderungswerkzeug betrachten. Schauen Sie, bestätigen Sie, dann handeln Sie. Verwenden Sie enge Rollen, abgefragte Passwörter, gefilterte Abfragen und explizite Datenbanknamen. Diese Gewohnheit ist wichtiger, als eine lange Liste von Befehlen auswendig zu lernen.

Datenbank- und Collection-Größen sorgfältig lesen

Anfänger verwenden show dbs oft als Größenbestimmungswerkzeug, aber es ist nur ein Ausgangspunkt. Speicher-Engines, Komprimierung, Indizes und gelöschter Speicherplatz können die Größenangaben überraschend machen. Verwenden Sie Collection-Statistiken, wenn Sie mehr Details benötigen:

db.orders.stats()

Schauen Sie sich auch die Indexgröße an:

db.orders.totalIndexSize()

Indizes sind nicht kostenlos. Sie beschleunigen Lesevorgänge und einige Sortierungen, aber jeder Index fügt Schreib-Overhead und Speicher hinzu. Wenn eine Collection viele Indizes hat und Schreibvorgänge langsam sind, listen Sie sie auf und fragen Sie, welche Abfragen sie tatsächlich verwenden:

db.orders.getIndexes()
db.orders.find({ customerId: "c123" }).explain("executionStats")

Löschen Sie Indizes nicht leichtfertig in der Produktion. Ein ungenutzt aussehender Index kann einen monatlichen Bericht oder einen selten verwendeten Admin-Bildschirm unterstützen. Überprüfen Sie Abfrageprotokolle, Anwendungsbesitzer und Überwachung, bevor Sie ihn entfernen.

Grundlegendes Backup-Bewusstsein

Die Befehlszeilenverwaltung sollte immer mit Backup-Gewohnheiten verbunden sein. Wissen Sie vor zerstörerischen Wartungsarbeiten, wie die Datenbank gesichert wird und wie die Wiederherstellung getestet wurde. In selbstverwaltetem MongoDB sehen Sie möglicherweise mongodump und mongorestore für logische Backups:

mongodump --uri "mongodb://user@host:27017/myAppDB" --out ./backup

Für große Produktionssysteme können Dateisystem-Snapshots, Cloud-Anbieter-Snapshots, Ops Manager oder Atlas-Backups besser geeignet sein. Der Punkt für Einsteiger ist einfach: Behandeln Sie drop, deleteMany oder Rollenänderungen nicht als rückgängig machbar, es sei denn, Sie haben einen getesteten Wiederherstellungspfad.

Ein Backup, das Sie nie wiederhergestellt haben, ist eine Annahme. Üben Sie die Wiederherstellung in einer Nicht-Produktionsumgebung, damit Sie die Anmeldeinformationen, den Netzwerkzugriff und die Versionskompatibilität kennen, bevor ein Vorfall eintritt.

Protokolle prüfen, wenn Befehle nicht ausreichen

mongosh zeigt Serverantworten, ersetzt aber keine Protokolle. Wenn Benutzer langsame Abfragen, Authentifizierungsfehler oder Verbindungsabbrüche melden, überprüfen Sie die MongoDB-Protokolle und Ihre Plattformprotokolle. In selbstverwalteten Linux-Bereitstellungen befinden sich die Protokolle möglicherweise unter /var/log/mongodb/, abhängig von Paket und Konfiguration. In Containern verwenden Sie die Container-Laufzeitprotokolle. In Atlas verwenden Sie die Atlas-Benutzeroberfläche und herunterladbare Protokolle.

Ein häufiger Anfängerfehler ist es, auf serverStatus() zu starren, während der eigentliche Hinweis ein Authentifizierungsfehler, ein DNS-Problem, eine TLS-Fehlanpassung oder eine Erschöpfung des Anwendungsverbindungspools in Protokollen außerhalb von MongoDB ist.

Den Unterschied zwischen Datenbankrollen und Betriebssystemzugriff kennen

MongoDB-Benutzer sind keine Linux-Benutzer. Das Erstellen von myAppUser in MongoDB erstellt kein Shell-Konto. Jemandem SSH-Zugriff auf einen Datenbankserver zu geben, gibt ihm nicht automatisch Datenbankberechtigungen, obwohl es ihm gefährlichen indirekten Zugriff geben kann, wenn der Server schlecht konfiguriert ist.

Halten Sie diese Ebenen getrennt:

Linux-Benutzer: steuert den Zugriff auf den Host und die Dateien
MongoDB-Benutzer: steuert die Datenbankauthentifizierung und -autorisierung
Netzwerkrichtlinie: steuert, wer den MongoDB-Port erreichen kann
TLS: schützt den Datenverkehr und kann zertifikatsbasierte Identität unterstützen

Eine sichere Bereitstellung muss alle berücksichtigen. Ein starkes MongoDB-Passwort reicht nicht aus, wenn die Datenbank ohne Firewall-Regeln öffentlich lauscht. Ein privates Netzwerk reicht nicht aus, wenn jede Anwendung eine Admin-Rolle verwendet.

Eine sicherere Gewohnheit für Produktions-Shells

Wenn Sie in der Produktion arbeiten, machen Sie die Eingabeaufforderung und Verbindung offensichtlich. Einige Teams verwenden Terminalfarben, Shell-Aliase oder schreibgeschützte Benutzer zur Inspektion. Führen Sie mindestens ein paar Identitätsprüfungen nach dem Verbinden durch:

db.runCommand({ connectionStatus: 1 })
db
db.hello()

connectionStatus zeigt authentifizierte Benutzer und Rollen. db zeigt den Kontext. hello gibt Topologieinformationen. Diese drei Prüfungen verhindern eine überraschende Anzahl von Fehlern.

Verwenden Sie für die routinemäßige Inspektion ein schreibgeschütztes Konto. Wechseln Sie nur für das spezifische Änderungsfenster zu einem privilegierten Konto. Diese kleine Reibung ist nützlich. Sie zwingt Sie zu bemerken, wenn Sie im Begriff sind, etwas zu tun, das Daten ändern kann.

Wann man anhalten und um Hilfe bitten sollte

Einige MongoDB-Befehle sind anfängerfreundlich; andere nicht. Seien Sie vorsichtig mit der Neukonfiguration von Replica Sets, Sharding-Metadaten, erzwungenen Neukonfigurationen, dem Beenden von Operationen, dem Komprimieren von Collections und dem Ändern von Authentifizierungseinstellungen auf einem Live-System. Diese Aktionen können die Verfügbarkeit beeinträchtigen.

Wenn der Befehl die Cluster-Topologie ändert oder Daten entfernt, halten Sie inne und holen Sie eine zweite Überprüfung ein. Die besten Administratoren sind nicht diejenigen, die am schnellsten tippen. Sie sind diejenigen, die wissen, wann ein Befehl ein Backup, ein Wartungsfenster und ein weiteres Paar Augen verdient.

Read Concern und Write Concern auf hohem Niveau verstehen

Anfänger müssen Read und Write Concern nicht am ersten Tag optimieren, aber sie sollten wissen, dass diese Einstellungen existieren. Write Concern steuert die Bestätigung, die MongoDB nach einem Schreibvorgang gibt. Ein stärkerer Write Concern kann auf die Replikation auf mehr Mitglieder warten. Ein schwächerer kann schneller zurückkommen, gibt aber weniger Sicherheit über die Haltbarkeit bei Ausfällen.

Read Concern steuert, welches Maß an Datenkonsistenz eine Leseoperation anfordert. In vielen einfachen Anwendungen sind die Standardeinstellungen in Ordnung, aber in Replica Sets und verteilten Systemen beeinflussen diese Einstellungen, was Ihre Anwendung nach einem Failover oder während einer Replikationsverzögerung sicher annehmen kann.

Die administrative Lektion ist praktisch: Wenn jemand meldet, dass "MongoDB einen Schreibvorgang verloren hat" oder "die App veraltete Daten gelesen hat", schauen Sie nicht nur auf den Insert-Befehl. Überprüfen Sie die Treibereinstellungen, Write Concern, Read Preference, Read Concern, die Gesundheit des Replica Sets und das Wiederholungsverhalten der Anwendung.

Seien Sie vorsichtig mit aus dem Internet kopierten Beispielen

Die MongoDB-Syntax hat sich im Laufe der Zeit geändert. Ältere Blogbeiträge verwenden möglicherweise die alte mongo-Shell anstelle von mongosh, alte Hilfsnamen oder Befehle, die noch funktionieren, aber nicht mehr bevorzugt werden. Einige Beispiele werden auch mit deaktivierter Authentifizierung ausgeführt, was keine sichere Produktionsannahme ist.

Wenn Sie einen Befehl kopieren, stellen Sie drei Fragen:

Für welche MongoDB-Version wurde dies geschrieben?
In welchem Datenbankkontext wird es ausgeführt?
Welche Berechtigungen benötigt der verbundene Benutzer?

Wenn der Befehl zerstörerisch ist, fügen Sie eine vierte Frage hinzu: Wie stelle ich wieder her, wenn dies schief geht?

Verwenden Sie Compass und Atlas, ohne die Shell aufzugeben

Grafische Werkzeuge sind nützlich. MongoDB Compass kann helfen, Dokumente, Indizes und Abfragepläne zu inspizieren. Atlas bietet Überwachung, Backups, Warnungen und Benutzerverwaltung für gehostete Cluster. Diese Werkzeuge sind oft einfacher für die visuelle Inspektion als rohe Shell-Ausgabe.

Dennoch, lernen Sie die Shell-Befehle. Bei Vorfällen, Automatisierung, SSH-only-Umgebungen oder Dokumentationsüberprüfungen ist ein präziser mongosh-Befehl einfacher zu teilen als "klicken Sie auf den dritten Tab in der Benutzeroberfläche." Der beste Workflow ist nicht Shell versus GUI. Verwenden Sie die GUI zum Erkunden und die Shell, um wiederholbare Aktionen klar auszudrücken.