Frage

Ich habe also einen Test -DB -Server, der auf einem Replikationsstrom eingerichtet wurde. Über den Namen kam ein Optimierer durch, so dass so schnell den Raum auf dem Sklaven Datadir füllte. Mysql wartete pflichtbewusst auf noch mehr Platz.

Dieses Datadir ist ein Dateisystem, das nur als Datadir von MySQL verwendet wird, sodass etwas anderes frei wurde.

Ich hatte einen 4 -Gig -InnoDB -Testtisch, der nicht Teil des Replikationsstroms war, also dachte ich, ich würde etwas versuchen, um zu sehen, ob es funktionieren würde, und als Testumgebung war ich nicht allzu besorgt, wenn die Dinge schrecklich schief gelaufen waren.

Hier sind die Schritte, die ich unternommen habe

  1. Spülte den Tisch, den ich gerade bewegen wollte
  2. Platzierte ein Leseschloss (obwohl nichts darüber geschrieben hat und es nicht im Replikationsstrom war)
  3. Kopierte die .frm und .ibd in ein Dateisystem mit einem Gästezimmer
  4. Entsperrte den Tisch
  5. Den Tisch verkürzt - Dies befreite genug Platz für die Optimierung, um die Replikation wieder zu tuckern.
  6. Stoppen Sie die Sklaven-/Abschalten von MySQL
  7. Kopieren Sie die Datei von TMP zurück in das Data DIR
  8. Starten Sie MySQL neu

Im .er -Protokoll zeigt sich nichts, die Dinge sehen gut aus. Ich verbinde mich und benutze mydb; Und sehen Sie sich den Tisch an, mit dem ich in Showtischen herumgespielt habe. Aber wenn ich es versuche

select * from testtable limit 10;

Ich bekomme den Fehler

ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist

Nach dem, was ich bisher beurteilen kann, kann ich aus allen anderen Tischen gut lesen und die Replikation begann mit Beschwerden wieder auf.

Kann ich etwas tun, um mich von diesem Punkt zu erholen? Ich kann es bei Bedarf von Grund auf neu aufbauen, war aber neugierig, was andere über dieses Unternehmen im Allgemeinen dachten. Gab es irgendetwas an der Reihe von Schritten, die ich unternahm, die mit makelloteren Ergebnissen gelandet wäre?

Was wäre, wenn dies kein Testserver war, das ich nicht einfach live machen und sehen konnte, was passiert? Was hätte der beste Weg, um den Platz vorübergehend auf einem Produktionssklaven zu befreien, wenn ich das mögen müsste?

War es hilfreich?

Lösung

Das Größte, was die meisten Menschen über Kürzungstisch vergessen, ist das, dass Kürzungstabelle ist DDL und nicht DML. In InnoDB enthält die Metadaten innerhalb von Ibdata1 eine nummerierte Liste von InnoDB -Tabellen. Durch die Verwendung von Tricate -Tabellen wird die interne Metadaten -ID der InnoDB -Tabelle verändert. Dies geschieht, weil die Tribünentabelle die folgende wirksam ausreicht:

Beispiel: Um eine InnoDB -Tabelle namens mydb.mytb abzuschneiden

USE mydb
CREATE TABLE newtb LIKE mytb;
ALTER TABLE mytb RENAME oldtb;
ALTER TABLE newtb RENAME mytb;
DROP TABLE oldtb;

Der neue MyTB hätte somit eine andere interne Metadaten -ID.

Wenn Sie die .ibd -Datei an einen anderen Ort kopiert haben, enthält die .ibd die ursprüngliche interne Metadaten -ID. Wenn Sie die .IBD -Datei einfach zurücksetzen, wird die interne Metadaten -ID nicht mit der des in Ibdata1 versöhnt.

Was Sie tun sollen, ist Folgendes:

Kopieren Sie die .ibd -Datei der InnoDB -Tabelle. Dann führen Sie das aus

ALTER TABLE tablename DISCARD TABLESPACE;

Um es später zurückzubringen, kopieren Sie die .ibd -Datei wieder in Datadir und führen Sie dann aus

ALTER TABLE tablename IMPORT TABLESPACE;

Dies hätte die interne Metadaten -ID erhalten.

Stellen Sie sicher, dass .Frm immer vorhanden ist.

Ich habe einem Kunden einmal geholfen, 30 InnoDB -Tische wiederherzustellen, die er auf die gleiche Weise versteckte. Ich musste einen anderen DB -Server verwenden und einige Spiele mit Hinzufügen und Ablegen von InnoDB -Tabellen spielen, um die richtige interne Metadaten -ID zu jagen.

Der Kunde fand diesen Artikel: http://www.chriscalender.com/?tag=innodb-error-tlespace-id-in-file . Wir haben es benutzt und es hat sehr geholfen. Ich hoffe es hilft dir.

Andere Tipps

Ich habe mit meinem Mac erlebt, bevor ich an einen Freund verkaufte, kopieren Sie einfach den XAMPP -Ordner nur auf meine Festplatte. (Nicht Erfolg) Leider hat es mir Probleme gebracht, weil ich die folgenden Schritte ausprobiert habe: - Ich installiere frische XAMPP und kopiere das ganze httdocs und var mysql auf meinen neuen Mac, die DB nur mit .frm und .ibd, Ich funktioniert nicht, ich kann immer noch nicht auf die Tabellen in PhpMyAdmin zugreifen ... - Ich habe versucht, dieselbe XAMPP -Version zu installieren und die oben genannten Schritte zu wiederholen, und funktioniert immer noch nicht. - beschlossen, ins Bett zu gehen.

(Erfolg) - Heute Morgen habe ich meine Backup -Festplatte mitgebracht und mit Windows 7. - Neueste XAMPP für Windows, C: xampp - Ich habe einen von Website (Ordner) aus meinem Backup httdocs und entsprechende Datenbankordner in var mysql sind in meinem Windows 7 bereit, ich möchte nur mit einer Website versuchen und den Rest probieren, da ich viele Projekte in httdocs und var mysql habe - ich kopiere den Erwähnung httdocs order in Windows C: xampp httdocs und kopieren Sie die var mysql nach c: xampp mysql daten

Noch nicht letztes kopiere ich die ib_logfile0, ib_logfile1, ibdata1 von meiner Sicherungsdatei zu Windows XAMPP C: xampp mysql data

Ich aktualisiere das http: // localhost/mywebsite

Wow wow fertig ... es funktioniert ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top