So, nach gefühlt 2 Jahren habe ich es endlich hinbekommen, dass in Matomo auch Load Data Infile funktioniert. Ein bisschen mehr Anleitung seitens Matomo hätte ich mir da schon gewünscht als der recht einfache Hinweis "Datenbankfähigkeit fehlt", denn das Forum ist ja nicht gerade leer von derartigen Fragen.
Der Witz an der Sache ist, das wird durch mehrere Sicherheitseinstellungen erst mal verhindert und mehrere eben gemeint als "in verschiedenen Diensten" und Stellen.
Als Erstes braucht es einen Datenbank-User mit File-Zugriffsrechten. Wenn man nicht gerade mit Root arbeitet, dann muss man die in der Regel erst mal vergeben. Dazu reicht im PHPMyAdmin folgendes:
Der Username ist natürlich entsprechend anzupassen.
Dann muss man MySQL oder eben Maria-DB noch beibringen, dass es die Funktion überhaupt nutzen darf. Dazu in der Datei "/etc/mysql/my.cnf" in den Abschnitten [mysqld] und [mysql] jeweils folgende Anweisung hinzufügen.
Den MySQL-Server nun neu starten. Fertig ist es aber noch nicht. Der User "mysql" hat in der Regel keinen Zugriff auf Dateien im public_html-Dir, denn das gehört je nach Umsetzung entweder einem PHP-FPM-User oder Apache als "www-data". Also muss der MySQL-User in die entsprechende Gruppe des vHosts hinzugefügt werden. Wenn die Gruppe www-data ist, dann entsprechend so:
Empfehlenswert ist aber, gerade wenn man PHP-FPM verwendet, dem Piwik-Host eine eigene Gruppe zu heben und MySQL entsprechend in diese hinzuzufügen.
So, Sache erledigt? Nein, leider nicht, aber genau hier dachte ich das auch immer. Matomo meldet aber weiterhin: Fehler, nicht möglich Ich weiß nicht, wann das genau hinzugekommen ist, aber die nächste Schutzfunktion ist in PHP! Wer kommt schon auf die Idee, dass wenn mit der Datenbank was nicht geht, man an PHP heran muss? Genauer gesagt ist diese im PHP-eigenen MySQLi-Modul.
Arbeitet man nun mit PHP-FPM, dann könnte man meinen, man vergibt die Berechtigung einfach für den einen Pool für Matomo und versucht es mit so was hier:
Das liefert nach einem Neustart zwar keinen Fehler, bringt aber auch nichts, Load Data Infile geht weiterhin nicht. Diese Einstellung "mysqli.allow_local_infile" lässt sich, warum auch immer, nicht über die Konfiguration des Pooles steuern, sie muss zwingend in die php.ini bzw. ist da schon drinnen, nur eben deaktiviert. Ansonsten würde das im Pool auch nicht viel Sinn ergeben, denn der ist ja nur für den normalen Webzugriff, also PHP-FPM. Cronjobs zur Archivierung von Matomo oder eben Updates per Console laufen aber per CLI.
Also muss diese Datei bearbeitet werden: /etc/php/7.3/cli/php.ini
Darin befindet sich recht weit unten der Abschnitt [MySQLi]. Dort steht die entsprechende Anweisung als
Diese entsprechend wieder einkommentieren, also das ";" am Anfang entfernen. Ein Neustart ist nicht erforderlich, da PHP-CLI kein Dämon ist und ohnehin jedes mal selbst neu startet.
Anschließend meldet der Systemprüfbericht von Matomo aber einen Erfolg
Ganz schön kompliziert und aufwändig, für so eine Kleinigkeit. Archivierungen laufen nun aber gefühlt dreimal so schnell wie vorher.