MySQL Konfiguration: innodb_log_file_size

Hallo liebe Server Administratoren!

Ich weiß es ist frech zu fragen, aber könntet Ihr über folgendes nachdenken:
Es ist möglich Binärdaten in MySQL-DB abzuspeichern, wobei die Datenmenge durch verschiedene Umgebungsvariablen beschränkt ist. Möchte man eine Datei abzuspeichern, müssen alle Einschränkungen bedacht werden. Momentan dürfen Dateien bis 128MB als Datei auf dem Server im Dateisystem abgespeichert werden (Free Style Benutzer). Das Speichern in MySQL ist jedoch durch innodb_log_file_size auf 4,8MB eingeschränkt.


Wie ich auf 4,8MB komme, wenn SELECT @@GLOBAL.innodb_log_file_size AS LogFileZize; 48MB ausgibt?

PHP gibt folgende Fehlermeldung aus wenn größere Dateien nicht abgespeichert werden können:

The size of BLOB/TEXT data inserted in one transaction is greater than 10% of redo log size. Increase the redo log size using innodb_log_file_size.

Wäre es zu frech Euch zu bitten innodb_log_file_size zu erhöhen, falls euer Server über diesen Arbeitsspeicher verfügt? (Instanziierung muss bedacht werden) Mehr als 1280MB zu reservieren macht keinen Sinn wegen upload_max_filesize=120MB.

Ich weiß es ist möglich ein Upload einer Datei auf mehrere Transaktionen aufzuteilen. Der Programmieraufwand ist jedoch für einen Normalbenutzer kaum zu realisieren. Wir haben nicht alle IT Berufe.

Danke für Ihre Zeit
Gruß Markus

Liber Markus

ich nehme an, dass Du wirklich BLOB/Text meinst, da jedoch spielt es eine Rolle welcher „Tabellentreiber“ benutzt wird.

Generell jedoch möchten wir von so etwas wirklich abraten, denn SQL eignet sich für die Speicherung von Dateien wirklich nicht, außer in ganz bestimmten Szenarien.

Denn bedenke bitte, dass bei der Ausgabe über z.B. ein PHP-Script, der Datenstrom von der Datenbank kommt - statt von einer Datei, was letztlich wesentlich effizienter ist.

Denn über eine Datei kann mit fopen-Systemoperationen, welche auch via PHP sehr Hardwarenah abgebildet werden, direkt zugegriffen und (intern) über flush() die Ausgabe auch angezeigt bzw. zum Download angeboten werden.

Bei der Datenbank sieht das etwas anders aus - das muss via CGI zum PHP-Script fließen, wo auch jede Menge Puffer involviert sind, die sich nicht allesamt immer so direkt mit flush() ansteuern lassen, sondern auch eine Mindest- und Maximalgröße haben …daher benutze bitte unbedingt direkt Dateien, statt BLOBs. Das ist nicht nur wesentlich effizienter und schneller, sondern auch weniger belastend für das CGI-gateway und funktioniert auch mit z.B. dem Fortsetzen abgebrochener oder pausierter Downloads, braucht auch nicht den ganzen Inhalt der Datei im RAM zu halten (das PHP-Script z.B. bläht sich dadurch gleichfalls auf).

Wir haben übrigens zeitweise auch nur 16kb Arbeitsspeicher :slight_smile:

https://inside.bplaced.net/abkuehlung-durchgaengig-frische-software-und-g33k-bugs-im-kernel/

Danke für die ausführliche Antwort.

Hab‘ den Artikel gerade gelesen und mir fällt nur eins ein: Respekt!

… nur ein Neustart des ganzen Systems. Aber warum? So etwas ist man gerade bei Linux nicht gewohnt – wir wissen jedoch vermutlich alle bei welchem System dies die Universallösung für viele Probleme ist.

Zu meiner Schande bin ich rot geworden. (MS Enterprise Developer)

Wie man unschwer erkennt ist PHP nicht mein Spielplatz. Ja, ich speichere kleine Konfigurationsdateien als BLOB in der Datenbank ab, die InnoDB nutzt (eine beliebte Lösung, wenn es schnell gehen soll). Der Grund dafür ist die Sicherheit. Oft beinhalten Router-Konfigurationsdateien hoch sensible Dateien. In der Vergangenheit passierte es oft, dass ganze Webseiten abgefarmt wurden. Warum soll ich potenziellen Angreifern es so einfach machen? Da kommt es auf die einige wenige langsame Zugriffe nicht an, wohl aber auf die Sicherheit. Kürzlich wollte ich eine Router-Sicherung meines Schwagers zum Testen hochladen, jedoch ist mein PHP-Script auf die Schnauze gefallen. Peinlich! Die oben stehende Fehlermeldung in englischer Sprache hat mich überrascht. Die Datei war ca. 17MB groß. Solche Fehlermeldungen bekommt man als Visual Studio Nutzer nicht oft präsentiert. Nun habe ich meine PHPs aktualisiert. Die 10% Angabe von innodb_log_file_size scheint sehr schwammig zu sein, denn ich habe bereits 7,5MB Dateien fehlerfrei hochladen können. Das Limit ist derzeit auf 4,8MB gesetzt. Schade, ein wenig mehr würde sehr helfen. Mit 32MB Uploads wäre ich voll zufrieden.

Ist die innodb_log_file_size bei den Pro Nutzern höcher?