Feed Aggregator
Attribute Promotion und Demotion im MariaDB Galera Cluster
In der MariaDB Master/Slave Replikation gibt es ein Feature welches sich Attribute Promotion/Demotion nennt.
Das kann man in etwa übersetzten mit Spalten Erweiterung/Einschränkung.
Einfach gesagt geht es darum, wie sich der Slave verhält oder verhalten soll, wenn Master und Slave unterschiedliche Spalten-Definitionen oder gar eine unterschiedliche Anzahl von Spalten oder eine Unterschiedliche Reihenfolge der Spalten aufweisen.
Use case des Kunden
Diese Woche haben wir mit einem Kunden den Fall diskutiert, wie er ein Rolling-Schema-Upgrade (RSU) in einem Galera Cluster ausführen könnte.
Bei früheren Schema-Änderungen hat er immer Probleme gekriegt was bis zum Totalausfall des Clusters für mehrere Stunden geführt hat.
Der Kunde meint, dass niemals Spalten gelöscht und neue Spalten immer nur am Ende einer Tabelle hinzugefügt werden.
Und das NICHT sichergestellt werden kann, dass wärend des Rolling-Schema-Upgrades keine schreibenden Verbindungen mehr existieren.
Verwendet wird das PHP ORM-Framework Doctrine.
Was …
Taxonomy upgrade extras: galera cluster, galera, replikation, mariadb,
MariaDB Honeypot
Bei unseren MariaDB für Fortgeschrittene Schulungen, welche wir in etwa alle zwei Monate halten, verwenden wir Maschinen, welche mit einer öffentlichen IP-Adresse direkt dem Internet ausgesetzt sind. Achtung: Man sollte NIE eine Datenbank ungeschützt direkt dem Internet aussetzen! Typischerweise dauert es keine 72 Stunden (3 Tage) bis wir ersten Zugriffsversuchen von aussen ausgesetzt sind.
Dies sieht dann im MariaDB Error Log in etwa wie folgt aus:
[Warning] Aborted connection 22939 to db: 'unconnected' user: 'unauthenticated' host: '118.193.58.125' (This connection closed normally without authentication)
[Warning] Aborted connection 22940 to db: 'unconnected' user: 'unauthenticated' host: '118.193.58.125' (This connection closed normally without authentication)
[Warning] Access denied for user ''@'118.193.58.125' (using password: NO)
[Warning] Access denied for user 'root'@'118.193.58.125' (using password: YES)
[Warning] Access denied for user 'root'@'118.193.58.125' (using password: YES)
Zuerst wird …
Taxonomy upgrade extras: mariadb, honeypot, security,
Wie verhält sich Galera Cluster mit vielen Knoten?
Kürzlich hatte ich die Gelegenheit ganz viele Linux Systeme (VMs mit Rocky Linux 9) aus einer unserer regelmässig stattfindenden Galera Cluster Schulungen eine Woche lang ganz für mich alleine zur freien Verfügung zu haben. Und auf den Maschinen war auch schon ein MariaDB 11.4.4 mit Galera Cluster installiert.
Da ich schon lange mal ausprobieren wollte, wie sich ein Galera Cluster mit zunehmender Anzahl Knoten verhält, war jetzt die Gelegenheit dies mal auszuprobieren.
Die folgenden Fragestellung sollten beantwortet werden:
- Wie verhält sich der Durchsatz eines Galera Clusters in Abhängigkeit der Anzahl Galera-Knoten?
- Mit welcher Konfiguration erhalten wir den grössten Durchsatz?
Insgesamt wurde mit 5 verschiedenen Versuchs-Parameter experimentiert:
- Anzahl Galera Knoten.
- Anzahl Client Maschinen (= Instanzen).
- Anzahl Threads pro Client (
--threads=). - Anzahl Galera Threads (
wsrep_slave_threads). - Laufzeit der Tests. Dieser Parameter wurde variiert weil einige Tests während des Laufs abgebrochen sind. …
Taxonomy upgrade extras: galera, galera cluster, cluster, skalierbarkeit, durchsatz,
Model v2 verbessert Resultate ein wenig
Wir haben unser Model verbessert (siehe v2). Jetzt sind die Resultate ein wenig besser/genauer.
Für die Benutzung des Modells siehe: ./fromdual_llm_v2.php --help
Taxonomy upgrade extras:
Spielen mit MariaDB Vector für erste KI-Tests
Künstliche Intelligenz (KI) und Vektor-Datenbanken sind heute in aller Munde. Da MariaDB demnächst auch mit Vektor-Datenbank-Funktionalität auf den Markt kommt, habe ich es als Datenbank-Berater für an der Zeit befunden mich etwas mit dem Thema zu beschäftigen, damit ich wenigstens einen Hauch Ahnung davon habe um was es geht…
Da ich nicht so der Theoretiker bin sondern eher gerne etwas praktisches mache, habe ich einen kleinen “KI” Prototypen gebaut, den jeder auf seinem Laptop (ohne GPU) sehr schnell und einfach nachbauen kann…
Ich habe mir auch erlaubt die Graphen aus dem Vortrag der MariaDB Foundation zu klauen (siehe Quellen am Ende).
Herunterladen der MariaDB Datenbank mit Vektor Funktionalität
Noch gib es keine MariaDB Pakete mit Vektor-Funktionalität, aber der Quellcode ist bereits verfügbar. Also baut man sich die Binaries halt schnell selber. Dies hat auf meiner alten Kiste eine knappe Stunde gedauert. Wenn die Binaries gebaut sind, kann man sich einen Tarball draus machen: …
Taxonomy upgrade extras: mariadb, ki, ai, vector, artificial intelligence, künstliche intelligenz, vektor,
Partieller physischer Datenbank-Restore für MariaDB und MySQL
Um was geht es?
Bei der Beschreibung von Backup- und /Restore-Szenarien wird in der Regel immer von einem vollständigen Backup (full backup) und einem vollständigen Restore (full restore) der Datenbankinstanz (mariadbd/mysqld) ausgegangen. Das bedeutet, dass die gesamte Datenbankinstanz inklusive aller Datenbanken (Schemata) gesichert und wiederhergestellt wird.
In der Praxis sieht die Situation jedoch oft anders aus: Es soll nicht eine ganze Datenbankinstanz wiederhergestellt werden, sondern nur einzelne Datenbanken oder gar einzelne Tabellen, weil nur diese kaputt gegangen sind.
Dies kann in vielen Fällen recht einfach mit den Tools mariadb-dump/mariadb oder mysqldump/mysql (logisches Backup) bewerkstelligt werden. Wenn die Datenbank oder die Tabelle jedoch sehr gross ist, wird die Wiederherstellung nicht in angemessener Zeit (einige Minuten bis wenige Stunden) abgeschlossen sein.
Genau in diesem Fall kommt der sogenannte partielle physische Restore ins Spiel. Partiell steht für eine oder mehrere Tabellen …
Taxonomy upgrade extras: partial restore, restore, database, schema,
Verkleinern des InnoDB-System-Tablespaces
Ein Feature, das mich im neuen MariaDB 11.4 LTS Release wirklich begeistert hat, ist das Verkleinern bzw. Schrumpfen des System-Tablespaces (ibdata1). Auf dieses Feature habe ich seit ca. 2006 sehnsüchtig gewartet und nun ist es mit MariaDB 11.4 endlich gekommen.
Eigentlich gibt es dieses Feature schon seit dem MariaDB 11.2 IR (Juni 2023).
Leider ist die Ankündigung dieses Features etwas zu kurz gekommen. In den MariaDB Release Notes heisst es lapidar:
The InnoDB system tablespace is now shrunk by reclaiming unused space at startup (MDEV-14795)
Die Gründe, warum dieses Datei ins Unermessliche wachsen kann, sind eigentlich schon lange bekannt und die Massnahmen dagegen sind auch klar (siehe Literatur). Nur sehen wir immer wieder MariaDB-Anwender draussen im Feld, die das Problem nicht oder zu spät auf dem Schirm hatten und nun mit einer viel zu grossen ibdata1-Datei da stehen…
Wie kann das Problem provoziert werden?
Das Problem kann provoziert werden, indem man …
Taxonomy upgrade extras: innodb, tablespace, ibdata1,
dbstat für MariaDB nach einem Monat produktiver Nutzung
Inhaltsverzeichnis
- Rückblick
- Einen Monat später
- Grösse der Tabellen
- Prozessliste
- Globale Variablen
- Metadata Lock und InnoDB Transaction Lock
- Globaler Status
Rückblick
Nachdem wir vor gut 5 Wochen dbstat für MariaDB (und MySQL) vorgestellt haben, haben wir es natürlich auch auf unseren Systemen ausgerollt um das Verhalten im täglichen Einsatz zu testen (eat your own dog food).
Das ging soweit ganz gut, bis wir auf unserem MariaDB aktiv/passiv Master/Master Replikationscluster auf die Idee kamen, dbstat auch auf dem passiven dbstat Node zu aktivieren (eine ähnliche Situation hätte man auch bei einem Galera Cluster). Dabei stellten wir fest, dass das Design von dbstat noch Potential hatte. Nachdem dieses Problem behoben war (v0.0.2 und v0.0.3) und auch das Problem gelöst war, wie man Events auf Master UND Slave aktivieren kann (MDEV-33782: Event is always disabled on slave), schien auf den ersten Blick alles in Ordnung. Leider haben wir bei der Korrektur nicht bedacht, dass auch die Daten hätten angepasst …
Taxonomy upgrade extras: performance, monitoring, performance monitoring, metadata lock, locking, performance_schema,
Parallel replication
Nice story Oli, good to hear that enabling parallel replication was able to help quickly catch-up the 5 days lag.
Yes, it is often the case that a high number of threads can be beneficial. This is because transactions often need to wait for each other to ensure correct commit order and data consistency. And until we get a thread pool mechanism in parallel replication, waiting transaction equals waiting threads, unfortunately.
Interesting with the foreign key violation reports from InnoDB. This is probably just normal temporary errors caused by the optimistic apply in parallel of transactions that end up conflicting (eg. insert in child table runs before insert in parent). Such errors are silently handled on the server layer to roll back and retry the offending transaction. But maybe these should also be silenced in the InnoDB status information to not cause confusion (when the foreign key error is temporary and automatically handled by the parallel replication)?
Taxonomy upgrade extras:
MariaDBs parallele Replikation zum Aufholen
Aufgrund eines applikatorischen Fehlers ist unsere Replikation während 5 Tagen stehen geblieben (über Ostern). Nachdem das Problem gelöst war, sollte die Replikation aufholen, was sich als sehr zäh herausstellte. All die üblichen Tricks (innodb_flush_log_at_trx_commit, sync_binlog, etc.) wurden bereits ausgereizt. Also haben wir uns an der parallelen Replikation des MariaDB Servers versucht.
Per default ist die parallel Replikation deaktiviert:
SQL> SHOW GLOBAL VARIABLES LIKE '%parallel%';
+-------------------------------+------------+
| Variable_name | Value |
+-------------------------------+------------+
| slave_domain_parallel_threads | 0 |
| slave_parallel_max_queued | 131072 |
| slave_parallel_mode | optimistic |
| slave_parallel_threads | 0 |
| slave_parallel_workers | 0 |
+-------------------------------+------------+
Durch setzen der Server Variablen slave_parallel_threads wird die parallele Replikation aktiviert: …
Taxonomy upgrade extras: replication, mariadb, parallel, multi-threaded,
MariaDB Server aus den Quellen bauen
Kürzlich musste ich ein neues MariaDB Feature testen, welches auf unseren Wunsch entwickelt wurde (MDEV-33782). Um dieses Feature zu testen musste ich aber den MariaDB Server selber aus den Quellen bauen, was ich schon seit längerem nicht mehr gemacht habe. Also eine neue Herausforderung, insbesondere mit CMake…
I habe hierzu die MariaDB Dokumentation Get, Build and Test Latest MariaDB the Lazy Way befolgt um den Server zu bauen.
Auf Ubuntu 22.04 hat es bei mir, aus mir nicht bekannten Gründen, nicht funktioniert. Also habe ich mir einen Ubuntu 23.04 (Lunar Lobster) LXC Container geclont und darin den MariaDB Server gebaut.
Damit das ganze funktioniert musste aber vorher noch im Container /etc/apt/sources.list durch die Paketquellen ergänzt werden:
deb-src http://de.archive.ubuntu.com/ubuntu lunar main restricted universe multiverse
deb-src http://de.archive.ubuntu.com/ubuntu lunar-updates main restricted universe multiverse
deb-src http://de.archive.ubuntu.com/ubuntu lunar-security main restricted …
Taxonomy upgrade extras: mariadb, build, compiling, sources, tarball,
MaxScale Konfigurations-Synchronisation
Inhaltsverzeichnis
- Übersicht
- Vorbereitungen
- MaxScale Konfigurations-Synchronisation aktivieren
- MaxScale Parameter ändern
- Neuer Slave hinzufügen und MaxScale bekannt machen
- Alter Slave entfernen und MaxScale bekannt machen
- Wie wird die Konfiguration synchronisiert?
- Was passiert im Konfliktfall?
- Tests
- MaxScale Konfigurations-Synchronisation wieder deaktivieren
- Literatur/Quellen
Übersicht
Ein Feature, welches ich beim Stöbern kürzlich entdecke habe, ist die MaxScale Konfigurations-Synchronisation Funktionalität.
Es geht hier nicht primär um einen MariaDB Replikations-Cluster oder einen MariaDB Galera Cluster sondern um einen Cluster bestehend aus zwei oder mehreren MaxScale Knoten. Bzw. etwas genauer gesagt, den Austausch der Konfiguration unter diesen MaxScale Knoten.

Pon Suresh Pandian hat bereits 2022 einen Blog-Artikel über dieses Feature geschrieben, der noch etwas ausführlicher ist, als dieser Beitrag hier.
Vorbereitungen
Es wurde eine Incus Container-Umgebung vorbereitet, bestehend aus 3 …
Taxonomy upgrade extras: maxscale, configuration, cluster, load balancer,
Sharding mit MariaDB MaxScale
Inhaltsverzeichnis
- Übersicht
- Vorbereitung der Shards (MariaDB Datenbank Instanzen)
- MaxScale SchemaRouter Konfiguration
- Starten und Stoppen des MaxScale Load Balancers
- Applikations-Tests
- Betrieb eines MaxScale Sharding-Systems
- Beobachtung / Observierung eines MariaDB MaxScale Sharding-Systems
- Literatur / Quellen
Übersicht
Dieses Feature sollte mehr oder weniger mit MariaDB MaxScale 6.x.y, 22.08.x, 23.02.x, 23.08.x und 24.02.x funktionieren. Wir haben es …
Taxonomy upgrade extras: sharding, maxscale, schemarouter, load balancer, multi-tenant,
dbstat für MariaDB (und MySQL)
Inhaltsverzeichnis
Eine Idee, die ich schon lange ins Auge gefasst und jetzt endlich, dank eines Kunden, in Angriff genommen habe, ist dbstat für MariaDB/MySQL. Die Idee ist angelehnt an sar/sysstat von Sebastien Godard:
sar - Collect, report, or save system activity information.
und Oracle Statspack:
Statspack is a performance tuning tool … to quickly gather detailed analysis of the performance of that database instance.
Funktionalität
Zwar haben wir seit längerem das Performance Schema, aber dieses deckt einige Punkte nicht ab, die wir in der Praxis als Problem sehen und von Kunden gewünscht werden:
- Das Modul
table_sizesammelt Daten über das Wachstum von Tabellen. Somit können Aussagen über das Wachstum einzelner Tabellen, Datenbanken, die zukünftigen MariaDB Kataloge oder die ganze Instanz gemacht werden. Dies ist interessant für Nutzer …
Taxonomy upgrade extras: performance, monitoring, performance monitoring, metadata lock, lock, locking, performance_schema,
Wir bauen uns ein Data Warehouse aus dem General Query Log
Das Design eines Data Warehouses unterscheidet sich vom relationalen Design. Data Warehouses designt man oft nach dem Konzept des Star Schemas.
Üblicherweise zäumt man beim Bau eines Data Warehouses das Pferd von hinten auf:
- Welche Fragen soll mein Data Warehouse beantworten können?
- Wie muss ich mein Modell designen damit sich meine Fragen einfach beantworten lassen?
- Woher kriege ich die Daten um das Modell zu befüllen?
- Wie befülle ich mein Model mit den Daten?
Zu Übungszwecken sind wir hier einer Fragestellung nachgegangen, welche ab und zu bei unserem Support auftaucht: Das System fängt plötzlich und unerwartet an sich ungewöhnlich zu verhalten, niemand hat was gemacht und niemand weiss warum. Beispiel bei einem Kunden letzte Woche: Um 15 Uhr fängt das System an instabil zu werden, wird anschliessend hart neu gestartet und stabilisiert sich dann ab 16 Uhr wieder…
Das einfachste wäre es, in einem solchen Fall, schnell mit dem Befehl SHOW PROCESSLIST auf die Datenbank zu schauen und dann wird oft …
Taxonomy upgrade extras: data warehouse, general query log,
Nachtrag
Mein lieber Kollege Matthias hat mich noch auf eine Folgeidee gebracht: Wie sieht das Ganze aus mit MariaDB Stored Procedures und Stored Functions?
Die beiden Tests hier:
DELIMITER // CREATE OR REPLACE PROCEDURE locktestsp (INOUT id INT) BEGIN SELECT id INTO id FROM test WHERE id = id LIMIT 1; END; // DELIMITER ; SET @id = 3; START TRANSACTION; CALL locktestsp(@id); SELECT @id; SELECT trx_tables_locked, trx_lock_structs, trx_rows_locked FROM information_schema.INNODB_TRX; +-------------------+------------------+-----------------+ | trx_tables_locked | trx_lock_structs | trx_rows_locked | +-------------------+------------------+-----------------+ | 0 | 0 | 0 | +-------------------+------------------+-----------------+
und hier:
DELIMITER // CREATE OR REPLACE FUNCTION locktestsf (IN id INT) RETURNS CHAR(50) DETERMINISTIC BEGIN SELECT id INTO id FROM test WHERE id = id LIMIT 1; RETURN id; END; // DELIMITER ; START …
Taxonomy upgrade extras:
InnoDB Deadlock bei SELECT? Nicht möglich! Oder doch?
Einleitung
Kurz vorab zwei Punkte:
-
Ein Deadlock ist eine Zustand, in welchem 2 unterschiedliche Transaktionen nicht mehr in der Lage sind weiter zu arbeiten, weil jede Transaktion jeweils einen Lock hält, welche die andere Transaktion gerade bräuchte. Weil jetzt beide Transaktionen jeweils darauf warten, bis die andere Transaktion ihren Lock wieder frei gibt, wird keine von beiden Transaktionen ihre jeweiligen Locks wieder frei geben. Und das würde bis zum Sankt-Nimmerleins-Tag andauern. Um das zu vermeiden schreitet die MariaDB Instanz ein und killt kurzerhand diejenige Transaktion, die weniger Arbeit geleistet hat. Die Applikation kriegt darauf hin eine Deadlock Fehlermeldung vom Typ:
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction -
Im MariaDB Ökosystem gilt allgemein das Mantra, dass ein
SELECTkeine Locks verursacht (Ausnahme:FOR UPDATEoderLOCK IN SHARE MODE) und somit auch nicht Teil eines Deadlocks sein kann.
Das Problem
Ein langjähriger Kunde kommt zum …
Taxonomy upgrade extras: deadlock, select,
MariaDB und MySQL Schulungsprogramm 2023
Auch im Jahr 2023 haben Sie wieder die Möglichkeit, sich bei unseren 3 Schulungspartnern in Essen, Köln und Berlin MariaDB und MySQL seitig fit zu machen.
Folgende Termine können wir Ihnen für das Jahr 2023 schon jetzt anbieten:
- 30
. Januar bis 3. Februar 2023: MariaDB/MySQL für Fortgeschrittene, GFU Schulungszentrum, Köln - 27
. Februar bis 3. März 2023: MariaDB/MySQL für Fortgeschrittene, Heinlein Akademie, Berlin - 20
. bis 24. März 2023: MariaDB/MySQL für Fortgeschrittene, Linuxhotel, Essen - 27
. bis 29. März 2023: Galera Cluster für MariaDB/MySQL, GFU Schulungszentrum, Köln - 24
. bis 28. April 2023: MariaDB/MySQL für Fortgeschrittene, GFU Schulungszentrum, Köln - 3
. bis 5. Mai 2023: Galera Cluster für MariaDB/MySQL, Linuxhotel, Essen - 15
. bis 17. Mai 2023: Galera Cluster für MariaDB/MySQL, Heinlein Akademie, Berlin - 5
. bis 7. Juni 2023: Galera Cluster für MariaDB/MySQL, GFU Schulungszentrum, Köln - 24
. bis 28. Juli 2023: MariaDB/MySQL für Fortgeschrittene, GFU Schulungszentrum, Köln - 11
. bis 15. September 2023: …
Taxonomy upgrade extras: schulung, training, seminar, 2023, mysql, mariadb, galera, mysql schulung, mariadb schulung, galera schulung,

