Guten Tag, liebe Habr-Teilnehmer! Lassen Sie mich mich vorstellen, ich bin Alexander. Systemadministrator eines kleinen, aber stolzen WEB-Studios. Wir möchten, dass alles schnell, sicher und mit aktueller Software funktioniert. Dafür haben wir sogar eine Nagios+PhantomJS-Kombination auf einem internen Bürocomputer eingerichtet und überprüfen alle 30 Minuten die Ladegeschwindigkeit der Seiten. Im Rahmen des Wartungsvertrags achten wir auch auf die Updates von 1C-Bitrix und installieren diese regelmäßig. Und eines Tages nach einem weiteren Update sehen wir in der Admin-Oberfläche die Mitteilung, dass 1C-Bitrix seit Sommer 2019 nicht mehr mit MySQL 5.5 funktioniert und ein Upgrade erforderlich ist. Die Jungs von ISPSystem machen einen super Job und erweitern regelmäßig die Funktionalität des Panels, dafür an dieser Stelle ein großes Dankeschön. Aber diesmal konnte ich nicht alles mit der Maus anklicken. Was dabei herausgekommen ist und wie viele graue Haare ich jetzt in meinem Bart habe, erfahren Sie im weiteren Verlauf.
Es gab nur die Möglichkeit, einen "alternativen Datenbankserver" zu installieren, der in einem Docker-Container läuft. Ich verstehe, dass Docker sehr ressourcenschonend ist, aber so gut es auch funktioniert, der Overhead wird immer >0 sein. Und wir hier kämpfen um Zehntelsekunden und optimieren vor der Veröffentlichung alle Webseiten, bevor wir einen Vertrag unterschreiben. Daher ist das keine Option für mich.
Okay, was steht in der Dokumentation? Backup von allem, eine Datei in yum.repos.d mit dem Link zum MariaDB-Repository hinzufügen, dann
rpm -e --nodeps MariaDB-server MariaDB-client MariaDB-commonYum wird später meckern, dass jemand Pakete entfernt hat, ohne dass es ihm bekannt war. Aber erstens - soll er meckern, das ist nicht schlimm. Und zweitens, wenn man die Deinstallation über yum macht, versucht es, zusammen mit MariaDB alles zu entfernen, was davon abhängt, einschließlich PHP und ISPManager und PHPmyadmin. Daher werden wir später mit dem Meckern klarkommen.
yum clean all
yum update
yum install MariaDB-server MariaDB-client MariaDB-commonIm Allgemeinen wurde alles installiert und funktionierte. Angenehm ist, dass die Datenbanken erkannt wurden und ich sie nicht aus Dumps wiederherstellen musste. Ich habe die Websites überprüft – sie funktionieren und sind schnell. Ich habe mich in ein paar Admin-Panels eingeloggt, um sicherzustellen, dass nichts ausgefallen ist, und habe dem Direktor geschrieben, dass alles in Ordnung ist. Keine 30 Minuten später stellte sich heraus, dass es überhaupt nicht in Ordnung ist...
Beim Versuch, mich in die Admin-Oberfläche einzuloggen und irgendetwas im Inhalt hinzuzufügen oder zu bearbeiten, erschien eine 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] Doppelter Eintrag '10555' für den Schlüssel 'PRIMARY']Da der Inhalt von unseren eigenen Mitarbeitern auf die Website hinzugefügt wird, wussten die Kunden noch nichts und haben uns bisher nicht in Stücke gerissen. Aber es war nur eine Frage der Zeit, denn die Informationen auf den Websites müssen aktualisiert werden, und viele Kunden verfolgen das selbst und aufmerksam.
Aus dem Fehlertext lässt sich ableiten, dass Bitrix versucht, einen neuen Datensatz in die Datenbank einzufügen, während der gleiche Primärschlüssel angegeben wird, der bereits für den bearbeiteten Artikel verwendet wird. Das bedeutet, dass es Grund zu der Annahme gibt, dass das Problem auf der Seite von Bitrix auftritt. Wir gehen auf deren Website und wenden uns an den Support. Fast sofort erhalten wir die Antwort: "Komplexes Problem. An die leitenden Ingenieure weitergeleitet — warten Sie..."
Wir mussten ziemlich lange warten (der gesamte Dialog fand im Zeitraum vom 25.06.2019 bis zum 09.07.2019 statt), und das Ergebnis war die Nachricht: "Dieses Problem steht nicht im Zusammenhang mit der Funktion der CMS Bitrix, sondern hängt mit der Funktionsweise der Datenbank selbst in MariaDB 10.4.6 zusammen. Leider kann dieses Problem von der Seite der Website nicht gelöst werden, Sie müssen auf eine ältere Version von MariaDB zurückgreifen."
Wir sind in Schwierigkeiten... Ich habe bereits zu Beginn der Geschichte über ein Downgrade nachgedacht, aber , dass es kein Downgrade geben kann. Sichern Sie die Dumps und stellen Sie sie neu auf einer frisch installierten Server. Das heißt, es ist gut, dass ich nicht alle Server auf einmal aktualisiert habe. Also "nur" rund hundert Websites (nervöses Lachen :-)). Außerdem sagte der Support: „Um das Problem bei der Verwendung von MariaDB 10.4.6 zu lösen, müssen Sie sich an den technischen Support von MariaDB wenden, da in der Transaktion keine Löschung des Datensatzes aus der DB erfolgt, wenn die Abfrage ausgeführt 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 nach Beginn der Kommunikation mit dem Support von MariaDB, aber dann kam eine E-Mail, in der mir äußerst höflich mitgeteilt wurde, dass ich kein kommerzieller Nutzer bin und deshalb keiner meiner Probleme gezielt gelöst wird. Es gibt jedoch ein Forum auf ihrer Website, und dort kann man versuchen, nach Lösungen zu suchen... Ich werde die Einzelheiten nicht weiter erschöpfen. Es gibt dort keine Lösungen.
Oh! Wir haben doch eine gekaufte Lizenz für ISP!
— Hallo, Support? Leute, helft mir!
— Entschuldigung, wir unterstützen keine Frostbarrieren, die die nativen Versionen von DBMS ändern. Wenn Sie möchten, gibt es eine Alternative mit einem Server in Docker.
— Aber wie gelangen die Benutzer und Datenbanken dorthin? In Docker?
— Nun, Sie werden sie dort manuell hinschieben...
— Ja! Und vergessen Sie nicht, dass der Port für MySQL sich ändern wird und Sie müssen alle Konfigurationen durchgehen und anpassen.
— Ok, danke, ich werde nachdenken...
Ich habe nachgedacht und beschlossen, manuell 10.4 zu löschen und 10.2 zu installieren, mit dem ich auf anderen Servern keine Probleme hatte.
Der Prozess unterschied sich nicht wirklich vom Update-Prozess. Man musste nur im Repository-Link 10.4 auf 10.2 ändern, den Cache für yum zurücksetzen und neu erstellen. Und noch eine „Kleinigkeit“: Nach der Deinstallation von 10.4 gehen wir nach /var/lib/mysql und löschen alles dort. Ohne diesen Schritt wird der Dienst nach der Installation von 10.2 ständig abstürzen und Sie werden sehen
Kann nicht mit der Datenbank verbinden '' Verbindung zum MySQL-Server beim 'Lesen des initialen Kommunikationspakets' abgebrochen, Systemfehler: 104 "Verbindung durch Peer zurückgesetzt"Oder
Verbindung zum MySQL-Server beim 'Handshake: Lesen des initialen Kommunikationspakets' abgebrochen, Systemfehler: 104Bevor ich die Datenbanken importiere, habe ich zuerst das Root-Passwort für MySQL gesetzt, das in den ISP-Konfigurationen angegeben war, und das Dump der MySQL-Datenbank importiert. Da die Benutzer und Berechtigungen bereits vorhanden sind, importieren wir einfach nacheinander alle Benutzerdatenbanken mit dem root-Account.
Skripttext zum Dumpen von 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 Importieren der Datenbanken müssen sie entpackt werden. Daher führen wir einfach den Befehl aus
gunzip /BACK/*.gzUnd zuletzt: Aus irgendeinem Grund sind bei den Datenbanknamen (wenn Sie sie über ISPmanager erstellen) Bindestriche erlaubt. Aber wenn Sie versuchen, ein Dump in eine Datenbank zu laden, deren Name einen Bindestrich enthält, erhalten Sie eine Fehlermeldung, dass die Abfragesyntax falsch ist.
Allen, die bis zum Ende gelesen haben, alles Gute. Ich bitte um Entschuldigung für die wahrscheinlich falsch gesetzten Kommas — ich habe damit Probleme. Wenn es Wünsche oder Vorschläge zu dem beschriebenen gibt — schreiben Sie mir direkt, da ich in den Kommentaren fürchte, etwas zu übersehen. Und beschimpfen Sie mich nicht zu sehr — das ist mein erster Artikel 🙂
UPD1:
Ich hätte nicht vergessen dürfen 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. So wurde es gemacht: Die gesamte Datenbank wurde von InnoDB in MyISAM konvertiert, die Informationen wurden aktualisiert und dann wieder zurück in InnoDB konvertiert.
UPD2:
Gerade eine E-Mail von 1C-Bitrix mit folgendem Inhalt erhalten:
Anfrage zur Nachbearbeitung umgesetzt
„Nach dem Upgrade von mariadb auf 10.4.6, Fehler beim Speichern des Elements des Informationsblocks“
Modul: iblock, Version: unbekannt
Lösung: abgelehnt
Es scheint, dass ein Update auf 10.4 vorerst nicht möglich ist 🙁
Quelle: habr.com
