Ich habe also einen Test-DB-Server, der auf einem Replikationsstream eingerichtet wurde. Über den Namen kam eine Optimierung durch, die schnell den Platz auf dem Slaves-Datadir ausfüllte. Mysql wartete pflichtgemäß nur auf etwas mehr Platz.
Dieser Datadir ist ein Dateisystem, das NUR als mysql-Datadir verwendet wird. Es gab also nichts anderes, was freigelassen werden konnte.
Ich hatte einen 4-Gig-Innodb-Test-Tisch, der nicht Teil des Replikations-Streams war, also nahm ich an, dass ich etwas ausprobieren würde, um zu sehen, ob es funktionieren würde, und als Testumgebung war ich nicht zu besorgt, wenn etwas schrecklich schief lief.
Hier sind die Schritte, die ich unternommen habe
- Er spülte den Tisch, den ich gerade bewegen wollte
- Es wurde eine Lesesperre gesetzt (obwohl nichts darauf geschrieben wurde und es nicht im Replikationsstream war)
- Kopieren Sie die Dateien .frm und .ibd in ein Dateisystem mit einem freien Speicherplatz
- Schaltete den Tisch frei
- Diese Tabelle wurde abgeschnitten. Dadurch wurde genügend Speicherplatz für die Optimierung freigegeben, damit die Replikation erneut ausgeführt werden kann.
- Stoppen Sie das Slaven / Herunterfahren von MySQL
- Kopieren Sie die Datei aus tmp zurück in das Datenverzeichnis
- Starten Sie mysql neu
Im .err-Protokoll wird nichts angezeigt, es sieht gut aus. Ich verbinde und benutze mydb; und sieh dir den Tisch an, mit dem ich in Showtabellen rumgespielt habe. Aber wenn ich es versuche
select * from testtable limit 10;
Ich bekomme den Fehler
ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist
Soweit ich das beurteilen kann, kann ich von allen anderen Tabellen einwandfrei lesen und die Replikation wurde ohne Beschwerden wieder aufgenommen.
Kann ich irgendetwas tun, um mich von diesem Punkt zu erholen? Ich kann es bei Bedarf von Grund auf neu erstellen, war aber neugierig, was andere über dieses Unternehmen im Allgemeinen denken. Gab es irgendetwas an der Reihe von Schritten, die ich unternommen habe, was zu fehlerloseren Ergebnissen geführt hätte?
Was wäre, wenn dies kein Testserver wäre? Ich könnte es nicht einfach live machen und sehen, was passiert? Was wäre der beste Weg, um vorübergehend Speicherplatz auf einem Produktionssklaven freizugeben, wenn mir das gefallen würde?
Table 'X' doesn't exist in engine
. Muss ich die obige Methode für jede Tabelle ausführen oder gibt es bessere Möglichkeiten, dies zu beheben?