MariaDB Server ist einer der beliebtesten Open-Source-Datenbankserver. Es wurde von den ursprünglichen Entwicklern von MySQL erstellt und wurde bekannt, weil es schnell, skalierbar und robust ist. MariaDB verfügt über ein reichhaltiges Ökosystem aus Speicher-Engines, Plugins und anderen Tools, die es für eine Vielzahl von Anwendungsfällen sehr vielseitig machen.
Die Anforderungen an Speicherplatz und E/A-Effizienz unserer Datenbanken werden immer höher. Auf diese Weise können wir unser Informationswachstum richtig verwalten.
Was die MariaDB-Speicher-Engine betrifft, so haben wir verschiedene Typen zur Auswahl, wie z. B. XtraDB, InnoDB, Aria oder MyISAM. Seit MariaDB Version 10.2.5 ist auch MyRocks verfügbar. MyRocks ist die Art von Speicher-Engine, die uns wirklich dabei helfen könnte, die zuvor erwähnten Anforderungen zu erfüllen.
In diesem Blog erfahren wir mehr über die neue MyRocks-Engine und wie wir sie in einem MariaDB-Server verwenden können.
Was ist MyRocks?
MyRocks ist eine Open-Source-Speicher-Engine, die auf RocksDB basiert, das ursprünglich von Facebook entwickelt wurde.
MyRocks kann eine gute Speicherlösung sein, wenn Sie Workloads haben, die eine höhere Komprimierung und E/A-Effizienz erfordern. Es verwendet eine Log Structured Merge (LSM)-Architektur, die eine bessere Komprimierung aufweist als die B-Tree-Algorithmen, die von der InnoDB-Engine verwendet werden (2x bessere Komprimierung im Vergleich zu von InnoDB komprimierten Daten). Es ist auch eine schreiboptimierte Speicher-Engine (10-mal weniger Schreibverstärkung im Vergleich zu InnoDB) und hat ein schnelleres Laden und Replizieren von Daten. MyRocks schreibt Daten direkt auf die unterste Ebene, wodurch alle Komprimierungs-Overheads vermieden werden, wenn Sie das schnellere Laden von Daten für eine Sitzung aktivieren.
Ein LSM funktioniert, indem es Änderungsoperationen in einem Puffer (memtable) speichert und die Daten sortiert und speichert, wenn dieser Puffer voll ist.
Standardmäßig werden Tabellen und Datenbanken in einem #rocksdb-Verzeichnis innerhalb des MySQL-Datenverzeichnisses gespeichert. Diese Informationen werden in .sst-Dateien ohne Trennung pro Tabelle gespeichert.
MyRocks unterstützt die isolierten Ebenen READ COMMITTED und REPEATABLE READ und unterstützt SERIALIZABLE nicht.
So implementieren Sie MyRocks auf einem MariaDB-Server
Installation
Zuerst müssen wir den MariaDB-Server installieren. In diesem Beispiel verwenden wir CentOS Linux Version 7.6 als Betriebssystem.
Standardmäßig versucht diese Betriebssystemversion, MariaDB 5.5 zu installieren, also fügen wir das MariaDB-Repository hinzu, um die MariaDB-Version 10.3 zu installieren.
$ cat > /etc/yum.repos.d/MariaDB.repo <<- EOF
# MariaDB 10.3 CentOS repository
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF
Und dann installieren wir das MariaDB Server-Paket:
$ yum install MariaDB-server
Dieser Befehl installiert verschiedene Paketabhängigkeiten, nicht nur MariaDB Server.
==========================================================================================================================================================================================================
Package Arch Version Repository Size
==========================================================================================================================================================================================================
Installing:
MariaDB-server x86_64 10.3.15-1.el7.centos mariadb 24 M
Installing for dependencies:
MariaDB-client x86_64 10.3.15-1.el7.centos mariadb 11 M
MariaDB-common x86_64 10.3.15-1.el7.centos mariadb 78 k
MariaDB-compat x86_64 10.3.15-1.el7.centos mariadb 2.8 M
boost-program-options x86_64 1.53.0-27.el7 base 156 k
galera x86_64 25.3.26-1.rhel7.el7.centos mariadb 8.1 M
libaio x86_64 0.3.109-13.el7 base 24 k
lsof x86_64 4.87-6.el7 base 331 k
make x86_64 1:3.82-23.el7 base 420 k
openssl x86_64 1:1.0.2k-16.el7_6.1 updates 493 k
perl-Compress-Raw-Bzip2 x86_64 2.061-3.el7 base 32 k
perl-Compress-Raw-Zlib x86_64 1:2.061-4.el7 base 57 k
perl-DBI x86_64 1.627-4.el7 base 802 k
perl-Data-Dumper x86_64 2.145-3.el7 base 47 k
perl-IO-Compress noarch 2.061-2.el7 base 260 k
perl-Net-Daemon noarch 0.48-5.el7 base 51 k
perl-PlRPC noarch 0.2020-14.el7 base 36 k
Transaction Summary
==========================================================================================================================================================================================================
Install 1 Package (+16 Dependent packages)
Standardmäßig wird der MariaDB-Server mit der InnoDB-Speicher-Engine installiert, also müssen wir die RocksDB-Engine installieren, um sie nutzen zu können.
$ yum install MariaDB-rocksdb-engine
==========================================================================================================================================================================================================
Package Arch Version Repository Size
==========================================================================================================================================================================================================
Installing:
MariaDB-rocksdb-engine x86_64 10.3.15-1.el7.centos mariadb 4.4 M
Installing for dependencies:
libzstd x86_64 1.3.4-1.el7 mariadb 211 k
snappy x86_64 1.1.0-3.el7 base 40 k
Transaction Summary
==========================================================================================================================================================================================================
Install 1 Package (+2 Dependent packages)
Dieser Befehl installiert einige erforderliche Abhängigkeiten und aktiviert das Plugin auf dem MariaDB-Server. Außerdem wird eine Konfigurationsdatei in /etc/my.cnf.d/rocksdb.cnf erstellt:
[mariadb]
plugin-load-add=ha_rocksdb.so
Wir können diese Installation überprüfen, indem wir den Befehl SHOW PLUGINS auf dem MariaDB-Server ausführen.
$ MariaDB> SHOW PLUGINS;
+-------------------------------+----------+--------------------+---------------+---------+
| Name | Status | Type | Library | License |
+-------------------------------+----------+--------------------+---------------+---------+
...
| ROCKSDB | ACTIVE | STORAGE ENGINE | ha_rocksdb.so | GPL |
| ROCKSDB_CFSTATS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_DBSTATS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_PERF_CONTEXT | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_PERF_CONTEXT_GLOBAL | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_CF_OPTIONS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_COMPACTION_STATS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_GLOBAL_INFO | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_DDL | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_SST_PROPS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_INDEX_FILE_MAP | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_LOCKS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_TRX | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_DEADLOCK | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
+-------------------------------+----------+--------------------+---------------+---------+
Wenn wir das Plugin aus irgendeinem Grund nicht aktiviert haben, können wir es dynamisch installieren, indem wir den Befehl INSTALL SONAME oder INSTALL PLUGIN ausführen:
$ MariaDB> INSTALL SONAME 'ha_rocksdb';
Eine andere Möglichkeit könnte der Neustart der Datenbankdienste sein. Diese Aktion sollte die Datei /etc/my.cnf.d/rocksdb.cnf lesen und das Plugin aktivieren.
$ service mariadb restart
Detaillierte Informationen zu unserer RocksDB-Engine finden Sie mit dem folgenden Befehl:
$ SHOW ENGINE ROCKSDB STATUS
Konfiguration
Bei den Konfigurationsdateien ist die Hauptdatei /etc/my.cnf, die das Verzeichnis /etc/my.cnf.d enthält, in dem wir den Rest der Konfigurationsdateien finden können. In diesem Verzeichnis haben wir standardmäßig die folgenden Konfigurationsdateien:
- enable_encryption.preset:Aktiviert die Verschlüsselung von ruhenden Daten.
- mysql-clients.cnf:Hier gibt es Konfigurationen für verschiedene Gruppen wie [mysqladmin], [mysqlcheck], [mysqldump] und mehr.
- rocksdb.cnf:In dieser Datei fügen wir die spezifische Konfiguration für MyRocks hinzu, wie default-storage-engine oder rocksdb_block_size.
- server.cnf:Hier haben wir Konfigurationen, die sich auf den Datenbankserver beziehen, wie bind-address und binlog_format.
Allen MyRocks-Systemvariablen und Statusvariablen ist „rocksdb“ vorangestellt. Werfen wir einen Blick darauf.
Systemvariablen:
$ MariaDB> SHOW VARIABLES LIKE 'rocksdb%';
+-------------------------------------------------+------------------------------------------+
| Variable_name | Value |
+-------------------------------------------------+------------------------------------------+
| rocksdb_access_hint_on_compaction_start | 1 |
| rocksdb_advise_random_on_open | ON |
| rocksdb_allow_concurrent_memtable_write | OFF |
| rocksdb_allow_mmap_reads | OFF |
| rocksdb_allow_mmap_writes | OFF |
| rocksdb_allow_to_start_after_corruption | OFF |
| rocksdb_blind_delete_primary_key | OFF |
| rocksdb_block_cache_size | 536870912 |
| rocksdb_block_restart_interval | 16 |
| rocksdb_block_size | 4096 |
…
+-------------------------------------------------+------------------------------------------+
Statusvariablen:
$ MariaDB> SHOW STATUS LIKE 'rocksdb%';
+----------------------------------------------------+-------+
| Variable_name | Value |
+----------------------------------------------------+-------+
| Rocksdb_rows_deleted | 0 |
| Rocksdb_rows_inserted | 0 |
| Rocksdb_rows_read | 0 |
| Rocksdb_rows_updated | 0 |
| Rocksdb_rows_deleted_blind | 0 |
| Rocksdb_rows_expired | 0 |
| Rocksdb_rows_filtered | 0 |
| Rocksdb_system_rows_deleted | 0 |
| Rocksdb_system_rows_inserted | 0 |
| Rocksdb_system_rows_read | 0 |
…
+----------------------------------------------------+-------+
Weitere Informationen zu den Status- und Systemvariablen finden Sie auf der MariaDB-Website.
Backups für MariaDB mit MyRocks
Backups sind ein Muss in allen Datenbankumgebungen. Sie sind unerlässlich für Systemwiederherstellung, Migrationen, Audits, Tests und mehr.
Wir können die Backups in zwei verschiedene Typen einteilen, logisch und physisch. Die logische Sicherung wird in einem für Menschen lesbaren Format wie SQL gespeichert, und die physische Sicherung enthält die zusätzlichen Binärdaten.
Für logische Backups auf MariaDB mit MyRocks als Datenbank-Engine ist das gängigste Backup-Tool der Klassiker mysqldump:
$ mysqldump -hHOST -uUSER -p DATABASE > FILE.SQL
Und für die physische Sicherung können wir Mariabackup verwenden, das mit MyRocks kompatibel ist:
$ mariabackup --backup --target-dir=/backup/ --user=USER --password=PASSWORD --host=HOST
Eine andere Option kann myrocks_hotbackup sein, erstellt von Facebook. Es kann verwendet werden, um eine physische Kopie von einer laufenden MyRocks-Instanz auf einen lokalen oder entfernten Server zu bringen, ohne die Quellinstanz zu stoppen.
Einschränkungen bei der Verwendung von MyRocks für MariaDB
Schauen wir uns einige der Einschränkungen bei der Verwendung der MyRocks-Engine an...
- Die optimistische parallele Replikation von MariaDB wird möglicherweise nicht unterstützt
- MyRocks ist für 32-Bit-Plattformen nicht verfügbar
- MariaDB-Cluster (Galera-Cluster) funktioniert nicht mit MyRocks (nur InnoDB- oder XtraDB-Speicher-Engines)
- Die Transaktion muss in den Speicher passen
- Erfordert spezielle Einstellungen zum Laden von Daten
- SERIALIZABLE wird nicht unterstützt
- Transportierbarer Tablespace, Fremdschlüssel, räumlicher Index und Volltextindex werden nicht unterstützt
Schlussfolgerung
MyRocks ist in MariaDB ab Version 10.2.5 verfügbar. Wie bereits erwähnt, kann diese Speicher-Engine für Sie nützlich sein, wenn Sie Workloads haben, die eine hohe Datenkomprimierung und eine höhere E/A-Effizienz erfordern. Um mehr über MyRocks zu erfahren, kannst du dir dies ansehen.