2009-05-20 6 views
9

Ich habe mehrere MySQL-Datenbanken und ich möchte einige Verwaltungsaufgaben für eine bestimmte Datenbank ausführen. Wie stelle ich sicher, dass sich niemand während der laufenden Aufgaben mit dieser Datenbank verbinden kann?Wie mysql Datenbank exklusiv sperren?

Antwort

0

Sie haben ein paar Optionen, wie ich es sehe:

  • Shutdown mysqld, den Dämon, der Verbindungen zu Datenbanken eingerichtet werden. Dies hat den Nachteil, dass der Zugriff auf die mysql-Datenbanken auf diesem Computer verhindert wird.

  • Verschieben Sie die Datei oder ändern Sie die Zugriffsberechtigungen, damit nur Ihr Benutzer damit arbeiten kann. (Ich habe keine Ahnung, ob das funktioniert.) Die Datenbankdateien befinden sich irgendwo wie /var/lib/mysql. Vergessen Sie nicht, wenn Sie fertig sind, um sie wieder zu etwas zu ändern, das mit mysqld arbeiten kann!

Viel Glück!

11

Offenbar können Sie den FLUSH-Befehl für diese als solche verwendet werden:

> FLUSH TABLES WITH LOCK READ;

und dann

> UNLOCK TABLES;

, um die Datenbank erneut zu entsperren. Es ist nicht sicher, ob in den Tabellen eine Einstellung vorgenommen werden muss, um einen Readlock zu ermöglichen. Sie können dies testen, indem Sie versuchen, eine manuelle Einfügung durchzuführen, nachdem die Datenbank gesperrt wurde, und wenn Sie eine Fehlermeldung über die gesperrte Tabelle erhalten, wissen Sie, dass es funktioniert hat.

More information on FLUSH command

+1

Dies ist die richtige Antwort. Wir verwenden dies, um Snapshots von ganzen Datenbanken zu erstellen, um neue Replikations-Slaves zu erstellen. – Evert

+0

Hatte den Link zu reparieren (die MySQL 6.0-Zeile wurde zugunsten eines anderen Release-Zyklus fallen gelassen, wie auf http://lists.mysql.com/packagers/418 erklärt). Ich habe den Link zu den Dokumenten für 5.7 gemacht, die aktuellste verfügbare Version. Abgesehen davon, eine große +1: Das ist, was (am meisten) SO Antworten sollten aussehen: prägnant, genau und mit einem Verweis auf seriöse Ressourcen für diejenigen, die tiefer in das Thema vertiefen wollen. –

0

Wenn Sie den Server für die Zeit der Wartung zu stoppen leisten können, stoppen Sie den Daemon und konfigurieren es nicht zu Netzwerkverbindungen zu hören. Nur Verbindungen über einen lokalen UNIX-Socket zulassen.

Dann anmelden lokal auf der gleichen Maschine, entweder physisch oder per SSH. Solange kein anderer Benutzer Zugriff auf das Gerät hat, ist sichergestellt, dass Sie alleine sind. Wenn Sie fertig sind, stellen Sie die ursprüngliche Konfigurationsdatei wieder her und starten Sie den Daemon neu.

Ein anderer Ansatz wäre, alle Benutzerkonten vorübergehend zu deaktivieren, aber "root" (oder was auch immer Sie für Ihre Wartung verwenden) für die jeweilige Datenbank. Dies hat jedoch den Nachteil, dass Sie mit Kontodaten arbeiten, die ein wenig gefährlicher sind, als nur Netzwerkverbindungen zu verhindern.