MariaDB Server är en av de mest populära databasservrarna med öppen källkod. Det skapades av de ursprungliga utvecklarna av MySQL och det blev populärt för att vara snabbt, skalbart och robust. MariaDB har ett rikt ekosystem av lagringsmotorer, plugins och andra verktyg som gör den mycket mångsidig för en mängd olika användningsfall.
Kraven på diskutrymme och I/O-effektivitet i våra databaser fortsätter att växa högre. Detta för att vi ska kunna hantera vår informationstillväxt på ett korrekt sätt.
När det gäller MariaDB-lagringsmotorn har vi olika typer att välja mellan såsom XtraDB, InnoDB, Aria eller MyISAM. Sedan MariaDB 10.2.5 version har MyRocks också varit tillgänglig. MyRocks är den typ av lagringsmotor som verkligen skulle kunna hjälpa oss att uppfylla kraven vi nämnde tidigare.
I den här bloggen kommer vi att lära oss mer information om den nya MyRocks-motorn och hur vi kan använda den i en MariaDB-server.
Vad är MyRocks?
MyRocks är en lagringsmotor med öppen källkod baserad på RocksDB som ursprungligen utvecklades av Facebook.
MyRocks kan vara en bra lagringslösning när du har arbetsbelastningar som kräver större komprimering och I/O-effektivitet. Den använder en Log Structured Merge (LSM)-arkitektur som har bättre komprimering än B-tree-algoritmerna som används av InnoDB-motorn (2 gånger bättre komprimering jämfört med data komprimerad av InnoDB). Det är också en skrivoptimerad lagringsmotor (10 gånger mindre skrivförstärkning jämfört med InnoDB) och den har snabbare dataladdning och replikering. MyRocks skriver data direkt till den lägsta nivån, vilket undviker alla komprimeringskostnader när du aktiverar snabbare dataladdning för en session.
En LSM fungerar genom att lagra modifieringsoperationer i en buffert (memtable) och sortera och lagra data när denna buffert är full.
Som standard lagras tabeller och databaser i en #rocksdb-katalog i MySQL-datakatalogen. Denna information lagras i .sst-filer utan separation per tabell.
MyRocks stöder isolerade nivåer READ COMMITTED och REPEATABLE READ och den stöder inte SERIALIZABLE.
Hur man implementerar MyRocks på en MariaDB-server
Installation
Först måste vi installera MariaDB-servern. I det här exemplet kommer vi att använda CentOS Linux version 7.6 som operativsystem.
Som standard kommer denna OS-version att försöka installera MariaDB 5.5, så vi lägger till MariaDB-förvaret för att installera 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
Och sedan installerar vi MariaDB Server-paketet:
$ yum install MariaDB-server
Detta kommando kommer att installera olika paketberoenden, inte bara 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 är MariaDB-servern installerad med InnoDB-lagringsmotorn, så vi måste installera RocksDB-motorn för att kunna använda 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)
Detta kommando kommer att installera några nödvändiga beroenden och det kommer att aktivera plugin-programmet på MariaDB-servern. Det kommer också att skapa en konfigurationsfil i /etc/my.cnf.d/rocksdb.cnf:
[mariadb]
plugin-load-add=ha_rocksdb.so
Vi kan verifiera denna installation genom att köra kommandot SHOW PLUGINS i MariaDB-servern.
$ 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 |
+-------------------------------+----------+--------------------+---------------+---------+
Om vi av någon anledning inte har insticksprogrammet aktiverat kan vi installera det dynamiskt genom att utföra kommandot INSTALL SONAME eller INSTALL PLUGIN:
$ MariaDB> INSTALL SONAME 'ha_rocksdb';
Ett annat alternativ kan vara att starta om databastjänsterna. Den här åtgärden bör läsa filen /etc/my.cnf.d/rocksdb.cnf och aktivera insticksprogrammet.
$ service mariadb restart
Vi kan hitta detaljerad information om vår RocksDB-motor genom att använda följande kommando:
$ SHOW ENGINE ROCKSDB STATUS
Konfiguration
Om konfigurationsfilerna är den huvudsakliga /etc/my.cnf, som inkluderar katalogen /etc/my.cnf.d där vi kan hitta resten av konfigurationsfilerna. I den här katalogen har vi följande konfigurationsfiler som standard:
- enable_encryption.preset:Det kommer att aktivera data at rest-kryptering.
- mysql-clients.cnf:Här finns konfigurationer för olika grupper som [mysqladmin], [mysqlcheck], [mysqldump] och mer.
- rocksdb.cnf:I den här filen lägger vi till den specifika konfigurationen för MyRocks, som default-storage-engine eller rocksdb_block_size.
- server.cnf:Här har vi konfiguration relaterad till databasservern som bind-adress och binlog_format.
Alla MyRocks systemvariabler och statusvariabler inleds med "rocksdb". Låt oss ta en titt på det här.
Systemvariabler:
$ 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 hitta mer information om status och systemvariabler på MariaDB-webbplatsen.
Säkerhetskopiering för MariaDB med MyRocks
Säkerhetskopiering är ett måste i alla databasmiljöer. De är viktiga för systemåterställning, migrering, granskning, testning och mer.
Vi kan kategorisera säkerhetskopiorna i två olika typer, logiska och fysiska. Den logiska säkerhetskopian lagras i ett läsbart format som SQL, och den fysiska säkerhetskopian innehåller ytterligare binära data.
För logiska säkerhetskopieringar på MariaDB med MyRocks som databasmotor är det vanligaste säkerhetskopieringsverktyget det klassiska mysqldump:
$ mysqldump -hHOST -uUSER -p DATABASE > FILE.SQL
Och för fysisk säkerhetskopiering kan vi använda Mariabackup som är kompatibel med MyRocks:
$ mariabackup --backup --target-dir=/backup/ --user=USER --password=PASSWORD --host=HOST
Ett annat alternativ kan vara myrocks_hotbackup, skapad av Facebook. Den kan användas för att ta en fysisk kopia från en körande MyRocks-instans till lokal eller fjärrserver, utan att stoppa källinstansen.
Begränsningar för att använda MyRocks för MariaDB
Låt oss titta på några av begränsningarna med att använda MyRocks-motorn...
- MariaDB:s optimistiska parallellreplikering kanske inte stöds
- MyRocks är inte tillgängligt för 32-bitarsplattformar
- MariaDB Cluster (Galera Cluster) fungerar inte med MyRocks (endast InnoDB eller XtraDB lagringsmotorer)
- Transaktionen måste passa i minnet
- Kräver speciella inställningar för att ladda data
- SERIALIZABLE stöds inte
- Transportabelt tabellutrymme, främmande nyckel, rumsligt index och fulltextindex stöds inte
Slutsats
MyRocks är tillgängligt i MariaDB från versioner högre än 10.2.5. Som vi nämnde tidigare kan denna lagringsmotor vara användbar för dig när du har arbetsbelastningar som kräver hög datakomprimering och högre nivåer av I/O-effektivitet. För att lära dig mer om MyRocks kan du kolla in det här.