Seite 1 von 1

MySQL SQL Modus und CONTENIDO 4.10

Verfasst: Sa 3. Okt 2020, 14:59
von xmurrix
Hallo zusammen,

neuere Versionen von MySQL werden immer strikter, viele Hoster stellen auf neue Versionen von MySQL um, die Datenbanken laufen dann mit strikten Einstellungen.

Das CONTENIDO CMS ist in der aktuellen Version 4.10.1 noch nicht in der Lage, mit einer MySQL-Datenbank zu arbeiten, die manche strikte SQL-Modi hat. Dazu gehören, soweit bisher bekannt, folgende Modi:
  • ONLY_FULL_GROUP_BY
  • STRICT_TRANS_TABLES
  • STRICT_ALL_TABLES
  • NO_ZERO_IN_DATE
  • NO_ZERO_DATE
Seitens CONTENIDO gibt es einige Tickets, die dieses Thema behandeln. Da die Änderungen weitgreifend sind und auch die Zahl der aktiven Entwickler sehr gering ist, wird sich das noch etwas in die Länge ziehen.

Nun vermehren sich die Fälle, bei denen CONTENIDO Benutzer Probleme bei der Installation oder Aktualisierung der Webseiten bekommen.

Ich war der Überzeugung, dass das Anpassen des SQL-Modus in der Konfiguration, dazu gibt es mehrere Beiträge im Forum, das Problem lösen sollte. Leider lag ich mit der Annahme falsch, das Setup und der Systemtest übernehmen nicht eine vorhandene Datenbank-Konfiguration.

Es gibt nun ein Ticket, dass das Thema angehen wird:
https://github.com/CONTENIDO/CONTENIDO/issues/154


Für alle, die ganz dringend eine Lösung für das Problem benötigen und keine Zeit für die Abarbeitung des Tickets haben oder gar auf die neue CONTENIDO Version warten wollen, habe ich eine Anleitung zusammengefasst, mit der man das mit ein Paar Anpassungen lösen kann.

Änderungen vor dem Ausführen des Setups

1. Öffnet die Datei "setup/lib/startup.php" und ändert die Konfiguration der Datenbank in wie folgt:

Code: Alles auswählen

$cfg['db'] = array(
    'connection' => array(
        'host' => (isset($_SESSION['dbhost'])) ? $_SESSION['dbhost'] : '',
        'database' => (isset($_SESSION['dbname'])) ? $_SESSION['dbname'] : '',
        'user' => (isset($_SESSION['dbuser'])) ? $_SESSION['dbuser'] : '',
        'password' => (isset($_SESSION['dbpass'])) ? $_SESSION['dbpass'] : '',
        'charset' => (isset($_SESSION['dbcharset'])) ? $_SESSION['dbcharset'] : '',
        'options' => array(
            MYSQLI_INIT_COMMAND => "SET SESSION sql_mode='';",
        ),
    ),
    'haltBehavior' => 'report',
    'haltMsgPrefix' => (isset($_SERVER['REQUEST_URI'])) ? $_SERVER['REQUEST_URI'] . ' ' : '',
    'enableProfiling' => false,
);
2. Öffnet die Datei "contenido/classes/class.systemtest.php" und ändert die Funktion testMySQLModeStrict() in wie folgt:

Code: Alles auswählen

    public function testMySQLModeStrict($host, $username, $password) {
        // host, user and password
        $dbCfg = array(
            'connection' => array(
                'host' => $host,
                'user' => $username,
                'password' => $password,
                'options' => array(
                    MYSQLI_INIT_COMMAND => "SET SESSION sql_mode='';",
                ),
            ),
        );

        $db = new cDb($dbCfg);
        $db->query('SELECT LOWER(@@SESSION.sql_mode) AS sql_mode');
        if ($db->nextRecord()) {
            if (cString::findFirstPos($db->f('sql_mode'), 'strict_trans_tables') !== false || cString::findFirstPos($db->f('sql_mode'), 'strict_all_tables') !== false) {
                return false;
            }
        }
        return true;
    }
Danach wird das Setup und die Prüfung des SQL-Modus im Systemtest beim Erstellen der Datenbankverbindung den SQL Modus wie gewünscht setzen und die Prüfung des SQL-Modus im Systemtest wird grünes Licht dafür geben.

Änderungen nach dem Ausführen des Setups

1. Erstellt nach dem Setup, falls nicht vorhanden, eine Konfigurationsdatei "data/config/{ENVIRONMENT}/config.local.php" und schreibt folgendes rein:

Code: Alles auswählen

$cfg['db']['connection']['options'] = [
    MYSQLI_INIT_COMMAND => "SET SESSION sql_mode='';",
];
CONTENIDO wird wie gewünscht laufen, da die Einstellung in der config.local.php dafür sorgt, dass der SQL-Modus beim Erstellen der Datenbankverbindung gesetzt wird.

Gruß
xmurrix

P.S.: Sollten manche immer noch beim Setup Probleme mit der Datenbank haben, bitte ich um entsprechendes Feedback.

Re: MySQL SQL Modus und CONTENIDO 4.10

Verfasst: Sa 3. Okt 2020, 17:54
von homtata
Hallo Murat,
erstmal danke für die schnelle Reaktion und die Beschreibung - es scheinen aber noch zwei wesentliche Fehler drin zu sein:
- Die Position der "options" ist bei dir kein Unterpunkt von "connections", sondern von "db" (in beiden Skriptänderungen), was falsch zu sein scheint.
- in der Datei setup/lib/functions findet sich keine Funktion namens setupInitializeConfig() und in einer ähnlich klingenden Funktion dort wird keinerlei DB-Array gesetzt, das man überschreiben könnte. Es gibt etwas baugleiches lediglich in der setup/lib/startup.php. Dort habe ich es geändert, und dann ist das Setup durchgelaufen.

LG
Viktor

Re: MySQL SQL Modus und CONTENIDO 4.10

Verfasst: Sa 3. Okt 2020, 18:15
von xmurrix
Hallo Viktor,

du hast vollkommen Recht, ich habe die beiden Fehler in der Beschreibung korrigiert.

Die 'options' ist natürlich ein Unterpunkt von 'connection' und die setup/lib/startup.php ist richtig, die Funktion setupInitializeConfig() gibt es in CONTENIDO 4.10.1 noch nicht.

Ich danke dir für das Feedback.

VG
Murat

Re: MySQL SQL Modus und CONTENIDO 4.10

Verfasst: Sa 3. Okt 2020, 18:45
von homtata
Hallo Murat,

perfekt, du bist ein Schatz! Danke für alles!
LG
Viktor

Re: MySQL SQL Modus und CONTENIDO 4.10

Verfasst: Mi 21. Okt 2020, 11:44
von McHubi
Danke für alles!
Dem schließe ich mich an!

Re: MySQL SQL Modus und CONTENIDO 4.10

Verfasst: Di 29. Dez 2020, 13:56
von McHubi
Hallo Murat,

da fehlt noch ein Komma... :wink:
missing-comma.JPG
(35.12 KiB) Noch nie heruntergeladen

Re: MySQL SQL Modus und CONTENIDO 4.10

Verfasst: Di 29. Dez 2020, 14:06
von xmurrix
Hallo Markus,
...da fehlt noch ein Komma...
danke für den Hinweis, ich habe es korrigiert.

Gruß
Murat

Re: MySQL SQL Modus und CONTENIDO 4.10

Verfasst: Mi 31. Mär 2021, 15:44
von motion pixels
Funktioniert wunderbar!
Sehr cool!
Danke!

ionos - 'strict' Modus

Re: MySQL SQL Modus und CONTENIDO 4.10

Verfasst: So 17. Okt 2021, 16:52
von mikedreissig
danke xmurrix!

Funktioniert auch bei Host Europe:
Update CONTENIDO von 4.9.12 auf 4.10.0
PHP-Version 7.3.30-he.0
Datenbankserver-Version 8.0.25-15

Edit:
Funktioniert nicht problemlos bei Host Europe bei Neuinstallation 4.10.0
PHP-Version 7.4.25-he.0
Datenbankserver-Version 8.0.26-16

Setup-Fehlermeldung:
"Unable to execute SQL statement:
ALTER TABLE con_area add INDEX idarea (idarea, name, online)
Mysql Error: Specified key was too long; max key length is 1000 bytes (1071)"

Workaround:
Die MySQL8-Datenbankkollation bei Host Europe ist standardmäßig auf utf8mb4_0900_ai_ci gesetzt. Die Kollation der leeren Datenbank auf utf8_general_ci setzen, dann läuft die Installation problemlos durch.

Grüße
mikedreissig

Re: MySQL SQL Modus und CONTENIDO 4.10

Verfasst: So 24. Okt 2021, 16:49
von Madtrick
Erstellt nach dem Setup, falls nicht vorhanden, eine Konfigurationsdatei "data/config/{ENVIRONMENT}/config.local.php" und schreibt folgendes rein:
Nach der Installation gibt es hier nur ein Verzeichniss production und eine Datei config.environment.php

Vermutlich soll bei der Install der Ordner {ENVIRONMENT} entstehen. Kann das sein?

Die Rechte an den Verzeichnissen /data und /data/config sind beide 0755. Neuinstallation mit Rechten auf 0777 brachten auch kein anderes Ergebnis.

Nach wie vor erhalte ich bei der Install die Meldung:
Bitte überprüfen Sie, dass Ihre Konfigurations- und Mandanten-Ordner (inklusive Cache-, Module- und Upload-Ordner sowie die CSS-, JS- und Template-Ordner) CHMOD-Rechte 755 besitzen. Stellen Sie bitte sicher, dass diese Ordner und alle Dateien den selben Besitzer auf Ihrem Webserver haben.

Welches sind die Konfigurations- und welche die Mandanten-Ordner? Und in welchen Verzeichnissen sind die anderen zu finden?

Wer kann mir helfen?

Re: MySQL SQL Modus und CONTENIDO 4.10

Verfasst: So 24. Okt 2021, 19:50
von xmurrix
Hallo Madtrick,
...Vermutlich soll bei der Install der Ordner {ENVIRONMENT} entstehen. Kann das sein?...
CONTENIDO wird mit der Ordnerstruktur "data/config/production" ausgeliefert, der Ordner wird nicht erstellt und {ENVIRONMENT} ist nur ein Platzhalter, da man unter "data/config" Konfigurationen für verschiedene Umgebungen (Lokal, Entwicklung, Test, Staging, Produktion, usw.) hinterlegen kann.

Nach der Installation sollte man also die Datei "data/config/production/config.local.php" selber erstellen und darin die in diesem Thread angegebenen Code schreiben.
...Nach wie vor erhalte ich bei der Install die Meldung:
Bitte überprüfen Sie, dass Ihre Konfigurations- und Mandanten-Ordner...
Das ist nur eine Info, nicht ein Hinweis darüber, dass die Schreibrechte in den Verzeichnissen falsch gesetzt sind.
...Welches sind die Konfigurations- und welche die Mandanten-Ordner? Und in welchen Verzeichnissen sind die anderen zu finden?...
Konfigurations-Ordner:
data/config

Mandanten-Ordner:
cms

CONTENIDO braucht Schreibrechte für folgende Ordner, deren Unterordner, sowie auf alle vorhandene Dateien darin:
- data
- cms/cache
- cms/css
- cms/data
- cms/js
- cms/templates
- cms/upload

Gruß
xmurrix

Re: MySQL SQL Modus und CONTENIDO 4.10

Verfasst: So 24. Okt 2021, 20:13
von Madtrick
Hi xmurrix,
danke für deine Ausführlichen Infos. Damit sollte ich nun wirklich weiter kommen.
Eine Frage aber doch noch, nur um ganz sicher zu sein.
Konfigurations-Ordner:
data/config

Mandanten-Ordner:
cms

CONTENIDO braucht Schreibrechte für folgende Ordner, deren Unterordner, sowie auf alle vorhandene Dateien darin:
- data
- cms/cache
- cms/css
- cms/data
- cms/js
- cms/templates
- cms/upload
Bei all diesen Verzeichnissen, Unterverzeichnissen und den darin enthaltenen Dateien sind die Rechte dann auf 0755 zu setzten?

Dann werde ich die Install noch einmal machen. Einziges Problem, beim Webhoster bekomme ich den Strict Mode nicht abgeschaltet. So muss ich erst mal mit dem Workaround von dir leben müssen. Ach ja, noch eines ist mir aufgefallen. Nach der Install kann ich mich nicht im Backend anmelden. No chance. Hängt das nun mit der bisher unsauberen Install zusammen? Gleiches geht übrigens mit dem Testaccount in eurer DEMO Webseite auch nicht. Rückmeldung ist, dass die Demo-Userdaten nicht stimmen würden, welche ich per Mail bekommen habe.
Vielleicht gibt es ja einen Zusammenhang...

Viele Grüße
Dirk

Re: MySQL SQL Modus und CONTENIDO 4.10

Verfasst: So 24. Okt 2021, 20:40
von xmurrix
Hallo Madtrick,
...Bei all diesen Verzeichnissen, Unterverzeichnissen und den darin enthaltenen Dateien sind die Rechte dann auf 0755 zu setzten?...
Ja, "0755" ist die Empfehlung von CONTENIDO. Allerdings hängt das vom System ab.
Du kannst z. B. per SFTP die Dateien auf den Server übertragen, der SFTP-User kann in einer anderen Gruppe als der Apache-User sein, unter der dann PHP läuft. Dann hat PHP keine Schreibrechte auf die Verzeichnisse/Dateien. Daher vergeben manche auch "0775" oder gar "0777". Die Empfehlung ist aber ganz klar "0755".

Gruß
xmurrix

Re: MySQL SQL Modus und CONTENIDO 4.10

Verfasst: Mo 25. Okt 2021, 09:02
von Faar
xmurrix hat geschrieben:
So 24. Okt 2021, 20:40
Allerdings hängt das vom System ab.
Kann man das in einen eigenen Thread verschieben?
Das hat jetzt mit MySQL nun gar nichts mehr zu tun.

Zum Thema: 777 nützt auch nichts, wenn man die Schreibrechte (chown) nicht hat, weil man die dann erst gar nicht mehr setzten kann, wenn es bereits auf 744 steht und man nicht Owner ist sondern lediglich Gruppe.
Im FTP siehts dann so aus: rwx r-- r--
Was Owner, Group und World entspricht.
Man muss dann den Owner (meistens den Serveradmin mit Usernamen root) bitten, wenigstens ein rwx rw- r-- daraus zu machen.
Das Problem habe ich derzeit aktuell, weil der Serveradmin nicht tut was ich will.

Grüße,
Faar