Bitrix und das Update von MariaDB auf die neueste stabile Version

Guten Tag, liebe Habr-Nutzer! Darf ich mich vorstellen? Ich bin Alexander, Systemadministrator eines kleinen, aber stolzen Webstudios. Wir möchten, dass alles schnell, sicher und mit aktueller Software lĂ€uft. Aus diesem Grund haben wir sogar auf einem internen BĂŒrocomputer eine Kombination aus Nagios und PhantomJS eingerichtet, um alle 30 Minuten die Ladegeschwindigkeit unserer Seiten zu ĂŒberprĂŒfen. Im Rahmen unseres Service ĂŒberwachen wir auch die Updates von 1C-Bitrix und installieren diese regelmĂ€ĂŸig. Und eines Tages, nach dem nĂ€chsten Update, sehen wir die Nachricht im Admin-Bereich, dass 1C-Bitrix seit Sommer 2019 nicht mehr mit MySQL 5.5 funktioniert und ein Update erforderlich ist. Die Leute von ISPSystem leisten hervorragende Arbeit und erweitern regelmĂ€ĂŸig die Funktionen der BenutzeroberflĂ€che – dafĂŒr unseren besonderen Dank. Aber diesmal hat es nicht geklappt, alles mit der Maus zu klicken. Was schiefgelaufen ist und wie viele graue Haare ich jetzt in meinem Bart habe, erfahren Sie im nĂ€chsten Abschnitt.

Es gab nur die Möglichkeit, einen "alternativen DB-Server" zu installieren, der in einem Docker-Container lĂ€uft. Ich verstehe natĂŒrlich, dass Docker Ressourcen sehr effizient nutzt, aber egal wie gut es funktioniert, es gibt immer einen Overhead, der >0 ist. Wir kĂ€mpfen hier fĂŒr Zehntelsekunden und optimieren alle Websites, bevor wir sie veröffentlichen und einen Vertrag unterzeichnen. Also ist das nicht meine Lösung.
Okay, was steht in der Dokumentation? Backup von allem, die Datei in yum.repos.d mit dem Link zum MariaDB-Repository hinzufĂŒgen, dann

rpm -e --nodeps MariaDB-server MariaDB-client MariaDB-common

Yum wird spĂ€ter maulen, dass jemand Pakete ohne sein Wissen entfernt oder installiert hat. Aber erstens - lass es ihn maulen, das ist nicht schlimm. Und zweitens, wenn man die Deinstallation ĂŒber yum macht, versucht er zusammen mit MariaDB auch alles zu entfernen, was davon abhĂ€ngt, also auch PHP, ISPManager und PHPmyadmin. Damit werden wir spĂ€ter klarkommen.


yum clean all
yum update
yum install MariaDB-server MariaDB-client MariaDB-common

Im Allgemeinen hat alles funktioniert und ist gestartet. Es ist erfreulich, dass die Datenbanken ĂŒbernommen wurden und ich sie nicht aus Backups wiederherstellen musste. Ich habe die Websites ĂŒberprĂŒft – sie funktionieren schnell. Ich habe mich in ein paar Admin-Bereiche eingeloggt, um sicherzustellen, dass nichts abgestĂŒrzt ist, und habe dem Direktor mitgeteilt, dass alles in Ordnung ist. Weniger als 30 Minuten spĂ€ter stellte sich jedoch heraus, dass alles andere als in Ordnung war


Beim Versuch, sich in das Admin-Panel einzuloggen und Inhalte hinzuzufĂŒgen oder zu bearbeiten, erschien folgende Fehlermeldung:

MySQL Abfragefehler: INSERT INTO b_iblock_element_property (ID, IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VALUE, VALUE_NUM) SELECT 10555, 2201, P.ID, '3607', 3607.0000 FROM b_iblock_property P WHERE ID = 184 [[1062] Doppelte Eintragung '10555' fĂŒr SchlĂŒssel 'PRIMARY']

Da unsere Mitarbeiterinnen den Inhalt auf der Website hinzufĂŒgen, wussten die Kunden zunĂ€chst noch nichts und haben uns noch nicht auseinandergerissen. Aber es war nur eine Frage der Zeit, denn die Informationen auf den Websites mĂŒssen aktualisiert werden, und viele Kunden achten selbst genau darauf.

Aus dem Fehlertext lĂ€sst sich ableiten, dass Bitrix versucht, einen neuen Datensatz in die Datenbank einzufĂŒgen, dabei jedoch denselben PrimĂ€rschlĂŒssel angibt, der bereits fĂŒr den bearbeiteten Artikel verwendet wurde. Daher gibt es GrĂŒnde zu vermuten, dass das Problem aufseiten von Bitrix liegt. Besuchen Sie deren Website und wenden Sie sich an den Support. Fast sofort erhalten wir die Antwort: „Komplexes Problem. Wir haben es an die Senior Engineers weitergegeben – bitte warten
“

Das Warten zog sich ziemlich lange hin (der gesamte Dialog fand zwischen dem 25.06.2019 und dem 09.07.2019 statt), und das Ergebnis war die Nachricht: „Dieses Problem hat nichts mit der Funktionsweise des Bitrix-CMS zu tun, sondern mit der Datenbank selbst in MariaDB 10.4.6. Leider gibt es von unserer Seite keine Möglichkeit, dieses Problem zu lösen. Es wird erforderlich sein, auf eine Ă€ltere Version von MariaDB zu wechseln.“

Das war’s
 Über einen Downgrade dachte ich bereits zu Beginn der Geschichte, aber hier steht ganz klar, dass ein Downgrade nicht möglich ist. Sichern Sie die Dumps und richten Sie alles neu auf einer frisch installierten Version ein. Server. Das heißt, es war gut, dass ich nicht alle Server auf einmal aktualisiert habe. Also „nur“ ein paar hundert Websites (nervöses Lachen :-)). Der Support hat auch gesagt: „Um das Problem mit der MariaDB-Version 10.4.6 zu lösen, mĂŒssen Sie den technischen Support von MariaDB kontaktieren, da in einer Transaktion keine DatensĂ€tze aus der DB gelöscht werden, wenn folgender Befehl verwendet wird:

$DB->Query("DELETE FROM ".$strTable." WHERE ID = ".$res["ID"]);
$results = $DB->Query("SELECT * FROM ".$strTable." WHERE ID = ".$res["ID"]);”

Die Hoffnung hielt ein paar Stunden wÀhrend ich mit dem MariaDB-Support sprach, aber dann kam eine E-Mail, in der mir sehr höflich mitgeteilt wurde, dass ich kein kommerzieller Nutzer bin und deshalb niemand gezielt mein Problem lösen wird. Es gibt jedoch ein Forum auf ihrer Website, wo ich versuchen kann, nach Lösungen zu suchen... Ich möchte nicht mit Details langweilen. Es gibt dort keine Lösungen.
Oh! Wir haben doch eine Lizenz fĂŒr ISP gekauft!
— Hallo, Support? Leute, helft mir!
— Es tut uns leid, wir unterstĂŒtzen keine Leute, die native Versionen der DBMS verĂ€ndern. Wenn Sie möchten, gibt es eine Option mit einem alternativen Server in Docker.
— Aber wie gelangen die Nutzer und Daten dahin? In Docker?
— Nun, Sie mĂŒssen sie einfach manuell dorthin befördern...
— Ja! Und vergessen Sie nicht, dass der Port fĂŒr MySQL geĂ€ndert wird und Sie alle Konfigurationen durchsehen und bearbeiten mĂŒssen.
— Okay, danke, ich werde nachdenken

Ich habe darĂŒber nachgedacht und beschlossen, 10.4 manuell zu deinstallieren und 10.2 zu installieren, mit dem es auf anderen Servern keine Probleme gab.

Der Prozess unterschied sich nicht wesentlich vom Aktualisierungsprozess. Man musste lediglich in den Repository-Link 10.4 durch 10.2 ersetzen, den Cache fĂŒr yum zurĂŒcksetzen und neu erstellen. Und noch eine „Kleinigkeit“: Nach der Deinstallation von 10.4 gehen wir zu /var/lib/mysql und löschen alles dort. Ohne diesen Schritt wird der Dienst nach der Installation von 10.2 stĂ€ndig ausfallen und Sie werden sehen.

Datenbankverbindung fehlgeschlagen '' Verbindung zum MySQL-Server bei 'Lesen des initialen Kommunikationspakets', Systemfehler: 104 "Verbindung zurĂŒckgesetzt von Peer"

Oder

Verbindung zum MySQL-Server bei 'Handshake: Lesen des initialen Kommunikationspakets', Systemfehler: 104

Bevor ich die Datenbanken importierte, habe ich zuerst das root-Passwort fĂŒr MySQL gesetzt, das in den ISP-Konfigurationen angegeben war, und das MySQL-Dump importiert. Da Benutzer und Berechtigungen bereits vorhanden sind, importieren wir einfach nacheinander alle Benutzerdatenbanken mit dem root-Konto.

Skripttext zum Dumpen der Datenbanken:

#!/bin/bash
echo 'show databases' | mysql -u root --password="ĐŸĐ°Đ ĐŸĐ›ŃŒ_РУйА" --skip-column-names | grep -v information_schema | xargs -I {} -t bash -c 'mysqldump -u root --password="ĐŸĐ°Đ ĐŸĐ›ŃŒ_РУйА" {} | gzip > /BACK/back-$(hostname)-{}-$(date +%Y-%m-%d-%H.%M.%S).sql.gz'

Vor dem Import der Datenbanken mĂŒssen sie entpackt werden. FĂŒhren Sie daher einfach den Befehl aus.

gunzip /BACK/*.gz

Und zuletzt: Aus irgendeinem Grund sind in den Namen der Datenbanken (wenn Sie sie ĂŒber ISPmanager erstellen) Bindestriche erlaubt. Wenn Sie jedoch eine Datenbank mit einem Bindestrich im Namen erstellen oder versuchen, ein Dump in diese zu laden, erhalten Sie die Nachricht, dass die Syntax der Anfrage falsch ist.

An diejenigen, die bis zum Ende gelesen haben, alles Gute. Ich bitte um Entschuldigung fĂŒr wahrscheinlich falsch gesetzte Kommata – damit habe ich Probleme. Wenn es WĂŒnsche oder VorschlĂ€ge zum Inhalt gibt, schreiben Sie mir bitte privat, denn in den Kommentaren habe ich Angst, etwas zu ĂŒbersehen. Und seien Sie nicht zu streng – das ist mein erster Artikel 🙂

UPD1:

Ich hĂ€tte fast vergessen zu erwĂ€hnen: WĂ€hrend ich versuchte, eine Lösung fĂŒr das Problem ohne Downgrade von MariaDB zu finden, musste ich die Informationen irgendwie aktualisieren. Es wurde so aktualisiert: Die gesamte Datenbank wird von InnoDB in MyISAM konvertiert, die Informationen werden aktualisiert und dann wird sie wieder in InnoDB konvertiert.
UPD2:

Gerade kam eine E-Mail von 1C-Bitrix mit folgendem Inhalt:

Die Anfrage zur Nachbearbeitung wurde umgesetzt.
„Nach dem Update auf mariadb Version 10.4.6 tritt ein Fehler beim Speichern des Elements des Informationsblocks auf“
Modul: iblock, Version: unbekannt
Lösung: abgelehnt

Es scheint also, dass ein Update auf 10.4 derzeit nicht möglich ist 🙁

Quelle: habr.com

Erwerben Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server đŸ”„ Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster