MariaDB Server er en af de mest populære open source-databaseservere. Det blev skabt af de oprindelige udviklere af MySQL, og det blev populært for at være hurtigt, skalerbart og robust. MariaDB har et rigt økosystem af lagringsmotorer, plugins og andre værktøjer, der gør det meget alsidigt til en bred vifte af anvendelsestilfælde.
Kravene til diskplads og I/O-effektivitet i vores databaser bliver stadig højere. Dette er så vi er i stand til at styre vores informationsvækst på en korrekt måde.
Hvad angår MariaDB-lagringsmotoren, har vi forskellige typer at vælge imellem, såsom XtraDB, InnoDB, Aria eller MyISAM. Siden MariaDB 10.2.5 version har MyRocks også været tilgængelig. MyRocks er den type lagringsmotor, der virkelig kunne hjælpe os med at opfylde de krav, vi nævnte tidligere.
I denne blog lærer vi mere om den nye MyRocks-motor, og hvordan vi kan bruge den i en MariaDB-server.
Hvad er MyRocks?
MyRocks er en open source-lagringsmotor baseret på RocksDB, som oprindeligt blev udviklet af Facebook.
MyRocks kan være en god opbevaringsløsning, når du har arbejdsbelastninger, der kræver større komprimering og I/O-effektivitet. Den bruger en Log Structured Merge (LSM)-arkitektur, der har bedre komprimering end B-tree-algoritmerne, der bruges af InnoDB-motoren (2x bedre komprimering sammenlignet med data komprimeret af InnoDB). Det er også en skriveoptimeret lagermotor (10x mindre skriveforstærkning sammenlignet med InnoDB), og den har hurtigere dataindlæsning og replikering. MyRocks skriver data direkte til det nederste niveau, hvilket undgår alle komprimeringsomkostninger, når du aktiverer hurtigere dataindlæsning for en session.
En LSM fungerer ved at gemme ændringsoperationer i en buffer (memtable) og sortere og gemme dataene, når denne buffer er fuld.
Som standard er tabeller og databaser gemt i en #rocksdb-mappe inde i MySQL-datafilen. Disse oplysninger gemmes i .sst-filer uden adskillelse pr. tabel.
MyRocks understøtter READ COMMITTED og REPEATABLE READ isolerede niveauer, og den understøtter ikke SERIALIZABLE.
Sådan implementeres MyRocks på en MariaDB-server
Installation
Først skal vi installere MariaDB-serveren. I dette eksempel vil vi bruge CentOS Linux release 7.6 som operativsystem.
Som standard vil denne OS-version forsøge at installere MariaDB 5.5, så vi tilføjer MariaDB-lageret for at installere MariaDB version 10.3.
$ 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
Og så installerer vi MariaDB Server-pakken:
$ yum install MariaDB-server
Denne kommando vil installere forskellige pakkeafhængigheder, ikke kun 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)
Som standard er MariaDB-serveren installeret med InnoDB-lagringsmotoren, så vi skal installere RocksDB-motoren for at kunne bruge den.
$ 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)
Denne kommando installerer nogle nødvendige afhængigheder, og den aktiverer pluginnet på MariaDB-serveren. Det vil også oprette en konfigurationsfil i /etc/my.cnf.d/rocksdb.cnf:
[mariadb]
plugin-load-add=ha_rocksdb.so
Vi kan bekræfte denne installation ved at køre kommandoen SHOW PLUGINS ind i MariaDB-serveren.
$ 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 |
+-------------------------------+----------+--------------------+---------------+---------+
Hvis vi af en eller anden grund ikke har pluginnet aktiveret, kan vi installere det dynamisk ved at udføre kommandoen INSTALL SONAME eller INSTALL PLUGIN:
$ MariaDB> INSTALL SONAME 'ha_rocksdb';
En anden mulighed kunne være at genstarte databasetjenesterne. Denne handling skal læse filen /etc/my.cnf.d/rocksdb.cnf og aktivere pluginnet.
$ service mariadb restart
Vi kan finde detaljerede oplysninger om vores RocksDB-motor ved at bruge følgende kommando:
$ SHOW ENGINE ROCKSDB STATUS
Konfiguration
Om konfigurationsfilerne er den vigtigste /etc/my.cnf, som inkluderer mappen /etc/my.cnf.d, hvor vi kan finde resten af konfigurationsfilerne. I denne mappe har vi som standard følgende konfigurationsfiler:
- enable_encryption.preset:Det vil aktivere data ved hvile kryptering.
- mysql-clients.cnf:Her er der konfigurationer for forskellige grupper som [mysqladmin], [mysqlcheck], [mysqldump] og mere.
- rocksdb.cnf:I denne fil tilføjer vi den specifikke konfiguration for MyRocks, såsom default-storage-engine eller rocksdb_block_size.
- server.cnf:Her har vi konfiguration relateret til databaseserveren som bind-adresse og binlog_format.
Alle MyRocks systemvariabler og statusvariable er indledt med "rocksdb". Lad os tage et kig på dette.
Systemvariable:
$ 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 |
…
+-------------------------------------------------+------------------------------------------+
Statusvariabler:
$ 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 |
…
+----------------------------------------------------+-------+
Du kan finde mere information om status og systemvariabler på MariaDB-webstedet.
Sikkerhedskopier til MariaDB ved hjælp af MyRocks
Sikkerhedskopier er et must i alle databasemiljøer. De er afgørende for systemgendannelse, migreringer, revision, test og mere.
Vi kan kategorisere sikkerhedskopierne i to forskellige typer, logiske og fysiske. Den logiske sikkerhedskopi er gemt i et menneskeligt læsbart format som SQL, og den fysiske backup indeholder de ekstra binære data.
For logiske sikkerhedskopier på MariaDB med MyRocks som databasemotor, er det mest almindelige backupværktøj det klassiske mysqldump:
$ mysqldump -hHOST -uUSER -p DATABASE > FILE.SQL
Og til fysisk backup kan vi bruge Mariabackup som er kompatibel med MyRocks:
$ mariabackup --backup --target-dir=/backup/ --user=USER --password=PASSWORD --host=HOST
En anden mulighed kan være myrocks_hotbackup, skabt af Facebook. Den kan bruges til at tage en fysisk kopi fra en kørende MyRocks-instans til lokal eller fjernserver uden at stoppe kildeinstansen.
Begrænsninger ved brug af MyRocks til MariaDB
Lad os se på nogle af begrænsningerne ved at bruge MyRocks-motoren...
- MariaDBs optimistiske parallelle replikering understøttes muligvis ikke
- MyRocks er ikke tilgængelig for 32-bit platforme
- MariaDB Cluster (Galera Cluster) virker ikke med MyRocks (kun InnoDB eller XtraDB storage engines)
- Transaktionen skal passe i hukommelsen
- Kræver specielle indstillinger for indlæsning af data
- SERIALIZABLE understøttes ikke
- Transportable Tablespace, Foreign Key, Spatial Index og Fulltext Index understøttes ikke
Konklusion
MyRocks er tilgængelig i MariaDB fra versioner højere end 10.2.5. Som vi nævnte tidligere, kan denne lagringsmotor være nyttig for dig, når du har arbejdsbelastninger, der kræver høj datakomprimering og højere niveauer af I/O-effektivitet. For at lære mere om MyRocks kan du tjekke dette ud.