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-commonYum 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-commonIm 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 , 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: 104Bevor 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/*.gzUnd 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
