Sep

1

MySQL/InnoDB: innodb_file_per_table

Eine eher unscheinbare Einstellung die es in sich hat. Standardmässig werden bei MySQL (unter Debian) die InnoDB Datenbanken/Tabellen alle in einer Datei (ibdata1) gespeichert und aufgrund der Art und Weise der Speicherung wird auch nicht mehr benötigter Speicher nicht mehr freigegeben (z.B. bei mysqlcheck -o). Aufgrund meines bisherigen Unwissens hatte sich die Datei auf über 4GB aufgebläht und ist bei einem Crash nun leider in Mitleidenschaft gezogen worden. MySQL hat daraufhin jegliche Mitarbeit verweigert und ich hatte mich auf die Suche gemacht, was es denn mit der Fehlermeldung auf sich hat und bin dabei über „innodb_file_per_table“ gestolpert. Hat zwar nicht geholfen die Daten zu retten, aber erspart mir vll. in Zukunft das eine oder andere Problem.

Damit nicht mehr alle Tabellen in einer Datei gespeichert werden, muss die Konfiguration (my.cnf) um „innodb_file_per_table“ erweitert werden. Einen Haken hat die Sache allerdings, die Änderung gilt nur für neue Tabellen. Die bisherigen Tabellen werden auch weiterhin in ibdata1 gespeichert. Der Versuch mit ALTER TABLE <table> ENGINE=InnoDB; hat bei mir leider nicht funktioniert. Und so blieb mir nur der Umweg, alle Datenbanken zu sichen, zu löschen und nochmal von vorne Anzufangen (mysql_install_db) und die Backups zurück zu spielen. Aufgrund der Datenmenge zieht sich das Ganze allerdings sehr in die Länge 🙁

Bei meinen „Recherchen“ bin ich auch noch über „MySQL Tuner“ gestolpert. Und muss sagen, auch das Tool gefällt mir. Bisher hatte ich auf tuning_primer.sh gesetzt, werde in Zukunft aber auch den MySQL Tuner befragen.

Nunja, wie heisst es doch so schön, Unwissenheit schützt vor Strafe nicht. Es ist mir allerdings unbegreiflich, weshalb die Einstellung nicht standardmässig auf einzelne Dateien gesetzt ist. Vorteile dieser Methode sind mir aktuell auch noch unbekannt. Werde aber versuchen mich noch weiter Schlau zu machen, aber vll. hat ja jemand ein paar Info’s?

1 Kommentar bis jetzt

  1. Kommentar von Bachsau:

    Auf reinen Datenbankservern erzielt man eine optimale Performance, wenn alles in einer Datei abgelegt wird. Eher schlecht, wenn auf dem Server noch was anderes laufen soll, und große Datenmengen nur kurz gespeichert werden. Normalerweise wachsen Datenbanken aber ohnehin kontinuierlich. Ich wüsste aber gern, wie du es zu Datenverlust gebracht hast. InnoDB ist normalerweise darauf ausgelegt, genau das zu verhindern, und Crashs zu überstehen.

Kommentar hinterlassen

You must be logged in to post a comment.

Archiv

Zufällige Bilder

  • DualShock 3 - Metallic Blue (US-Version)
  • Stockholm: Bilder einer Reise IV
  • MacBook Pro

Kommentare (28 Tage)

Sonstiges


Bloggeramt.de