The Revenge of Mariadb IV

Es ist mal wieder Zeit für eine MariaDB Geschichte. Keine Panik, die wird nicht wieder biblisch werden 🙂

Es war mal wieder Zeit für ein OS-Upgrade

Mittlerweile waren drei OS-Releases ins Land gegangen und eine sich anbahnende Sicherheitslücke im Exim .. PSSST! Ich habe sie Euch nicht verraten. Tut so, also wenn Ihr nächste Woche das erste mal davon gelesen habt, ja? 😉 .. zwang zu einem schnellen Update auf eine nicht betroffene Version. Fedora 29 sollte es sein 😉

Nun, glücklicherweise war auch ein anderer Testserver noch auf der gleichen alten OS Release, so daß er als Testlauf herhalten durfte. Dieser Test lief ausgesprochen positiv ab, um genau zu sein, makellos. Daher wurde kürzestfristig entschieden, auch den eigentlichen Kandidaten auf die gleiche Art zu updaten. Ein Snapshot der VM und 30 Minuten später  war das Update komplett und der Server startete wieder.

Mailserver, Webserver, IMAP-Server, diverse Dienste liefen. Was natürlich nicht lief war die MariaDB .. Ätzzz. N I C H T  S C  H O N  W I E D E R!   Auch gutes Zureden, energisches Nachtreten mit systemctl änderte nichts an diesem Status, der Datenbankserver startete nicht.

Same procedure als last year, Miss Sophie?

Leider nein. Letztes mal hatte sich bekanntlich ein Konfigfile des Systemd geändert, so daß die zum Start nötigen Limits nicht gesetzt wurden. Natürlich wurde der DIFF Test vom letzten mal auch wieder angewendet, zeigte aber keinen Unterschied an. Also mußte die gute alte Methode „Start den Dienst von Hand, dann bekommst Du Infos“ herhalten.

Wie macht man das?

Wir schauen uns mal an, was der Systemd so starten wollen würde:

cat /usr/lib/systemd/system/mariadb.service

Da findet dann das hier:

ExecStartPre=/usr/libexec/mysql-prepare-db-dir %n
# MYSQLD_OPTS here is for users to set in /etc/systemd/system/mariadb@.service.d/MY_SPECIAL.conf
# Note: we set –basedir to prevent probes that might trigger SELinux alarms,
# per bug #547485
ExecStart=/usr/libexec/mysqld –basedir=/usr $MYSQLD_OPTS $_WSREP_NEW_CLUSTER
ExecStartPost=/usr/libexec/mysql-check-upgrade

Das POST können wir ignorieren, soweit kommen wir nicht, bleiben nur Pre und der eigentliche Dienststart.

Das in den einschlägigen Envfiles  unter /etc/sysconfig/ nichts steht, reicht also ein :

/usr/libexec/mysqld –basedir=/usr

für den Test aus. Ja super.. eine Fehlermeldung:   Can’t set requested open_files (1024) to 2000 …

Das lag an dem ulimit hier:

# ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 32088
max locked memory (kbytes, -l) 16384
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 32088
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

Damit kann nicht mal die minimale Version der Datenbank starten 😉 Ergo geben wir ein: „ulimit -n 99999“ und starten es nochmal und siehe da, es hat sich doch wieder was geändert:

2019-06-04 23:13:41 0 [ERROR] /usr/libexec/mysqld: unknown variable ‚innodb_additional_mem_pool_size=50M‘
2019-06-04 23:13:41 0 [ERROR] Aborting

Wenn man denn endlich mal in Logfile schaut, sieht man dort auch die Warnung, daß sich das ja mal ändern könnte. Wer rechnet schon mit damit, daß da jemand mal Ernst macht 😉

2019-05-26 09:18:16 b753fd80 InnoDB: Warning: Using innodb_additional_mem_pool_size is DEPRECATED. This option may be removed in future releases, together with the option innodb_use_sys_malloc and with the InnoDB’s internal memory allocator.
2019-05-26 9:18:16 3075734912 [Note] InnoDB: innodb_empty_free_list_algorithm has been changed to legacy because of small buffer pool size. In order to use backoff, increase buffer pool at least up to 20MB.

Merke, erst ins Datenbank Log schauen, dann Server updaten!

Drei OS-Versionen sind dann vielleicht doch etwas happig bei einem Update. Diese Option findet man, so man sie gesetzt hat, in der Datei /etc/my.cnf . Anweisung auskommentieren, diesmal Datenbank über systemctl starten und läuft wieder 🙂

Und hier dachte ich eigentlich, ist die Story zu ende… war sie aber nicht!

Der an diesem Master angeschlossene Replications Elf ( Sklave sagt man im PCSG nicht mehr 😉 ) mochte die Replikationsblöcke vom Master nicht mehr lesen, weil Checksumme unbekannt! Das lag daran, daß der Replikations Elfe eine ältere Datenbankversion laufen hatte, da LTS. Einer langen Suche kurzes Ende:

Elfen anhalten: mysql -p -e „stop slave
auf den Master connecten: mysql -p -e „set global binlog_checksum=’NONE‘; SHOW MASTER STATUS;“ ausführen.

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000138 | 521505   |              |                  |
+------------------+----------+--------------+------------------+

Datenbank auf dem Master dumpen, auf den Elfen kopieren. Auf dem Elfen die Datenbank wipen, den SQL Dump einspielen.

Auf dem Elfen : mysql -p -e „change master to MASTER_LOG_FILE=’mysql-bin.000138′, MASTER_LOG_POS=521505;start slave

Sollte wieder gehen. Ging nicht.. Neuer Fehler! Statt:

Last_IO_Errno: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Slave can not handle replication events with the checksum that master is configured to log; the first event 'mysql-bin.000136' a'

gabs jetzt :

Last_IO_Errno: 1045
Last_IO_Error: error connecting to master 'test@masterserver:3306' - retry-time: 60  retries: 86400

Er zum Geier ist „TEST“ !?

Tja, keine Ahnung wie das passieren konnte, aber der „change master to …“ Befehl hatte den Replikationsusernamen durch „test“ ersetzt! Einfach so! Passwort war ok, Servername war ok, Username weg! Wie geil ist das denn ?!?!?

Also nochmal mit dem change master an den Elfen ran:

/usr/bin/mysql -p -e „stop slave;;CHANGE MASTER TO MASTER_USER=’myreplicationusername‘,MASTER_PASSWORD=’MeinPasswort‘;start slave

Da machste was mit als Admin … Ich wollte doch nur den Exim abdichten, nicht das Rad neu erfinden! Naja, jetzt gehts ja erstmal wieder 🙂 Und bevor noch einer fragt, nein, der Server hatte extern nur Port 25 zu bieten, deswegen ja auch das Update 😉

Fedora: Xen bootet endlich wieder aktuelle Kernel

Paravirtualisierte Virtuelle Maschinen eines XenServers booten endlich alle wieder die aktuellen Kernel, ein Grund zu feiern.

It’s Time to Party \o/

Die Einleitung mag dem Einen oder Anderen komisch vorkommen, aber auf den Tag habe ich lange warten müssen. Seit einiger Zeit booteten die Kernels von Fedora nicht auf Paravirtualsierten VMs vom XenServer. Zudem liefen die Kernel 4.16.x bis 5.0.0 echt instabil, so daß diese sich nach Stunden bereits reseteten. Richtig gelesen RESET, nicht Crash. Das ist so ziemlich die mieseste Art eines Kernelbugs, da man nicht mal sehen kann, was da wo gecrasht ist.

Unzählige Bugreports an RedHat und Citrix später ist nun endlich soweit, die aktuellen Kernel 5.0.16 laufen stabil und, das beste daran, booten überhaupt wieder auf allen XenServer-Versionen.

Damit bekommen die VMs auch die neueste Firmware für die CPUs mit und angesichts diverser neuer Intel-CPU Schwachstellen, eine wirklich beruhigende Angelegenheit. Daher 😀

 

Alternativ die Studioversion von Andrew W.K.’s Time to Party!

Ich finde ja den Live Sound trotz der Störgeräusche einfach besser. Das der als Band ein ganzes Stadion gefüllt hat, will man kaum glauben, oder? 😉

Linux – Die Legende von Edgar

Die Legende von Edgar ist jetzt kein Artikel zum Personenkult von Edgar in der Linuxwelt, nein, vielmehr ein Jump&Run-Game wie man es in unseren Kindertagen gespielt hat, nur mit besserer Grafik und Sound 🙂

Zur Storyline

Edgar ist von Beruf Sohn, ein Genie und seine Berufung ist, seinen Vater aus dem Kerker des bösen Zauberers, dessen Name nicht genannt wird, zu befreien. Das zumindest legen die ersten drei Spielszenen nahe. So mutig Edgar auch an die Sache ran geht, blendet er komplett aus, daß sein Vater die Nacht auch bei einer anderen Frau  verbracht haben könnte, Ihn offensichtlich vergessen hat und vermutlich gerade durch die Weltgeschichte rennt. Um herauszufinden, ob der Vater wirklich von dem Zauberer ohne Namen verschleppt wurde und vor allem, wieso überhaupt ???? Dazu müßt Ihr Edgar auf seinen Abenteurer begleiten!

Schritt 1 – An Waffen kommen

Bösen Zauberern kommt man überlicherweise auf zwei Arten bei, man freundet sich mit einem Drachen an und der brät den Zauberer am Spieß, oder man schlägt ihm den Kopf ab. Für letzteres braucht man Waffen und die muß man sich bei Freunden leihen. Jetzt wollen die natürlich was dafür haben, also gehts erst mal in den Wald Holz hacken und damit man das kann, muß man dort erst einmal die AXT finden.

Wer jetzt einfach losrennt und im Wald sucht, wird nicht weit kommen, weil die Waldbewohner nicht ganz ohne sind. Daher erst mal einen weiteren Job annehmen und die Spitzhacke besorgen, denn anders als durch seine Hände, kann Edgar damit die Waldbewohner erledigen und sich so seine verloren gegangenen Lebenspunkte auffrischen, was Maggie übrigens auch kann, wenn man die denn findet.

Wer mehr Hilfe braucht, könnte das Video ansehen, ansonsten rate ich dringend davon ab, damit man es selbst erfahren kann 😉

 

Ich hab es angespielt und es ist leicht zu spielen. Wer fleißig an allen Speicherpunkten absichert und sich nicht  offensichtliche Flapsigkeiten mit Edgar leistet, der wird eine ganze Weile daran Spaß haben.

Unter Fedora installieren

Mit  „sudo dnf install edgar“ oder über den Softwarecenter installiert Ihr das Spiel: