Locked table verhindert Backup-Prozess

chickendeath

Grünschnabel
Halle alle zusammen,

seit einiger Zeit führe ich über Nacht Backup-Prozesse meines Servers durch. Dort werden die httpdocs und die gedumpten MySQL-DB's mit in das Backup geschrieben. Seit ca. einer Woche hängt sich das Backup auf, bricht beim Dumpen ab und gibt als Fehler eine gelockte Tabelle an. Wenn ich im PhpMyAdmin kurz nachschaue, ist die Tabelle "in Benutzung" und dementsprechend kann ich sie nicht mit Aktionen wieder entsperren. Auch der Versuch manuell via "UNLOCK TABLES" die Tabelle zu entsperren schlug fehl. Nun, ich weiß nicht inwiefern ich da mit Shell und der MySQL Konsole etwas machen kann - aber ich brauche definitiv Hilfe von außerhalb weil ich nicht mehr weiterweiß und das Problem schnellstens gelöst werden muss. Ziel ist es also diese Tabelle zu entsperren. Meine Vermutung ist, dass beim Backup-Prozess eine Tabelle nach der anderen gelocked und nach dem dunmpen wieder unlocked wurde - also der Reihe nach. Irgendwas hat ihn dann bei der aufhören lassen und seitdem kommt das Script nicht mehr ran.

Ich wäre für Hilfe SEHR dankbar.

Mit freundlichem Gruß
Alexander Richter
 
Du solltest erstmal herausfinden, wo die Sperre gesetzt wurde und ob sie dann auch sicher wieder entsperrt wird.

Dein Backup-Tool sollte am Anfang eine Read-Sperre auf alle zu kopierenden Tabellen setzen und diese am Ende wieder freigeben. Besteht Dein Backup-Tool aus mehreren Skripten, muss natürlich jede Instanz die Sperre selbst setzen und am Ende auch wieder aufheben. Sicherer ist natürlich, alles in einem Rutsch zu machen.

Irgendein Skript setzt offensichtlich eine Write-Sperre. Das bedeutet nicht, wie man annehmen könnte, dass die Tabelle nur zum Schreiben für andere Threads gesperrt ist, sondern dass dieser Thread die Tabelle vollständig sperrt, damit er schreiben kann.
Eine Read-Sperre lässt alle lesenden Zugriffe zu, verhindert aber schreibende.
Wenn Du an irgendeiner Stelle außerhalb des Backup-Skripts eine Write-Sperre benötigst, solltest Du sie mit LOW PRIORITY anlegen, vielleicht auch so "intelligent", dass Du das nur in Zeiträumen extra kennzeichnest in denen ein Backup auftreten könnte.

Da Du vermutest, dass das Backup sich selber aussperrt, solltest Du es zunächst mit dem zweiten Absatz versuchen.

Gruß hpvw

Links: MySQL-Handbuch: LOCK TABLES/UNLOCK TABLES-Syntax
 
Zurück