Nee, hier kommt jetzt kein Jammer Artikel, weil alles so fürchterlich ist, sondern einer, der beschreibt wie ich ein proprietäres Programm, dass leider nicht mehr upgedatet wird, auf den Bullseye Server zum laufen gebracht habe.

Dies ist für mich eine Dokumentation, damit ich bei update oder Problemen eine Gedankenstütze habe.

Worum geht es?

Seit etlichen Jahren tat eine Webanwendung eines Freundes ihren treuen Dienst.

Es handelt sich um eine Individualanwendung zur Kunden- und Auftragsverwaltung. Nennen wir sie cruzifix.

Nach einem Serverumzug auf eine neuere Hardware und Neuinstallation von Debian Bullseye wollte das Programm einfach nicht mehr fehlerfrei laufen.

Eingegrenzt hatte ich die Ursache auf eine zu neue mysql / MariaDB Version. Eigentlich war meine Analyse korrekt.

Wie sich aber später heraus stellen sollte, gäbe es eine Lösung, ohne den ganzen Aufwand den ich jetzt hoffentlich ohne zu große Lücken aus dem Gedächtnis und meinen Aufzeichnungen in meinem Desktop wiki darstelle.

Ich kam zu dem Schluss, dass ich eine Docker instanz, oder eine virtuelle Maschine verwenden wollte, um cruzifix eine neue Heimat zu geben.

Eine einfache Lösung wäre eine VM, mit einer extra IP Adresse, den entsprechenden DNS darauf setzen, fertig.

ich habe einigen Aufwand betrieben dies umzusetzen, scheiterte aber an der Erreichbarkeit der VM von außen. Klarer Fall von mangelndem Wissen der Netzwerk Struktur.

Na, dachte ich, dann ist eine Docker Lösung doch vielleicht die bessere Lösung, keine Extra IP, kein zusätzliches Ssytem, welches ja auch betreut werden will. Ausserdem ist das gewählte System ja auch aus dem Support raus und dann ist wieder großer Aufwand, so habe ich mir das schön geredet.

Kurz zuvor habe ich erfolglos mysql-sandbox und dbdeployer ausprobiert

Also frisch ans Werk.

Rudimentäres Wissen zu docker ist vorhanden, da dachte ich, "nimmste gleich was aktuelles"

also mit der neuesten Version.

Nur als Stütze, es stellte sich heraus, dass hello-world war nicht zum funktionieren zu bringen.

Also nicht verwenden ( lag wohl am nicht installierten apparmor, was aber nicht so aus dem Fehlerverhalten lesbar war.)

nano /etc/apt/sources.list.d/docker.list 
apt install docker-compose docker.io 
docker run hello-world 

Dann also mit den Bullseye Bordmitteln...:

apt install docker-compose docker.io apparmor
docker pull mariadb # offizielles image von  https://hub.docker.com/_/mariadb

Der Name buster-mariadb ist ein Beispiel, er entstand wegen der Volume Testerei Geschichte, könnte man auch schlauer gewählt haben.

Die Option -v /var/backup/buster-mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mgeheimsql # stellt das Verzeichnis /var/lib/mysql dem Host auf /var/backup/buster-mysql und das mysql passwort auf mgeheimsql.

Bleibt die Option --sql_mode="" # Dadurch werden Sicherheitsfeatures der neueren MariaDB Version abgeschaltet, deshalb läuft dann cruzifix auch mit der mysql 5.7 und aktueller


docker run --name buster-mariadb -v /var/backup/buster-mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mgeheimsql -d a3871bf45d8a --sql_mode=""

Zu  --sql_mode="" 

Hiermit kann das Problem abgestellt werden, dass cruzifix viele Fehler wie z.:b no group by und so weiter wirft. set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

Indem ich --sql_mode="" setze, habe ich das Problem für die einzelne "cruzifix"-Datenbank behoben.

In einem Satz ausgedrückt: Es ist auch möglich, ohne Docker zu arbeiten, aber dann müssten für alle DB-Anwendungen auf dem Server die Optionen gesetzt werden, was wahrscheinlich deutlich mehr Aufwand bedeutet als die Verwendung einer Docker-Instanz.

Ich habe mir noch einen Alias gebaut.

Alias DS='docker stats --no-stream'

Häufige docker commands:

docker ps
docker update --restart unless-stopped buster-mariadb
docker stop buster-mariadb
docker exec -it buster-mariadb /bin/bash
docker image ls
docker container ls

 

Werde ich noch etwas ergänzen mit deteils zum Backup, zu den docker commandos ...

 

 

 

No comments

Add Comment

E-Mail addresses will not be displayed and will only be used for E-Mail notifications.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Standard emoticons like :-) and ;-) are converted to images.
BBCode format allowed
Markdown format allowed