Kdo sleduje devel-list Fedory, nemohl si nevšimnout diskuzí o nahrazení databáze MySQL jejím forkem MariaDB. Následující článek shrnuje, co komunitu vede k tomuto rozhodnutí a jaké bude mít tento krok kladné a záporné stránky.

Jak to všechno začalo?

Příběh začal někdy v roce 1995, kdy Michael Widenius s Davidem Axmarkem vydali první verzi relační databáze MySQL. Díky jednoduchému nasazení, spojení s webovým serverem Apache a dynamickými jazyky, zejména PHP (oblíbený LAMP stack), se MySQL rychle stala prakticky mainstreamem a dlouho to tak zůstalo. Začátkem roku 2008, kdy MySQL nebyla už zdaleka jedinou zajímavou open-source databází, prodali zakladatelé projektu práva společnosti Sun za 1 miliardu dolarů. Pod křídly Sunu to nevypadalo, že by projekt začal nějak výrazně strádat, nicméně již následující rok byl Sun koupen Oraclem.

Oracle má jistě výbornou základnu technicky schopných lidí, ale z jejich pohledu poskytovatele proprietární databáze open-source projekt nikdy nebude stěžejním. Jak roky ubíhaly, obavy o osud MySQL se začaly naplňovat. Vše vyvrcholilo, když Oracle přestal zveřejňovat informace o bezpečnostních fixech a regresní testy i velká část trackeru pro bugy v MySQL se staly neveřejnými. Pod záminkou zvyšování bezpečnosti začal držet stále více informací pod pokličkou. Spojení open source a MySQL má dnes již víceméně pouze historický kontext.

Jako odezva proti kritizovanému chování Oraclu vzniklo několik projektů, které z MySQL vycházely. Patří mezi ně Percona, Drizzle nebo MariaDB. Ty více či méně zachovávají kompatibilitu a soustředí se i na různé cíle. MariaDB je jedním z forků, který založil jeden z původních autorů MySQL, Michael Widenius, a který si za cíl klade kompatibilitu API i ABI.

Co je to ta MariaDB?

MariaDB je komunitní projekt, který respektuje všechny zásady open source a je vydávaný pod licencemi GPL, LGPL nebo BSD. Jak již bylo zmíněno výše, API i ABI je zachováno a navíc MariaDB funguje jako "drop-in replacement". To znamená, že pokud zůstanete u stejné minoritní verze, stačí pro přechod z MySQL nahradit binárky, knihovny a skripty a máte hotovo.

Verze MariaDB prakticky kopírují verze MySQL, nicméně kvůli mergování změn z nové verze je vydání MariaDB vždy o pár týdnů opožděno oproti MySQL. Rozdíl ve verzování postřehnete až pokud byste chtěli instalovat MariaDB 10, kde autoři skokem verze naznačují zamýšlené větší odchýlení od MySQL (MariaDB nebude obsahovat některé sporné nebo nestabilní funkce), nicméně tato verze je ještě ve vývoji a ve Fedoře se zatím nenachází.

Jaké jsou tedy rozdíly mezi stejnými verzemi MySQL a MariaDB (5.5.29) v době psaní článku? MariaDB zachovává veškerou funkcionalitu MySQL, plus přidává několik vlastních úprav navíc. Kromě oprav chyb a některých fixů zlepšujících rychlost byly přidány i některé enginy. Engine Aria můžeme použít namísto MyISAM. A engine XtraDB, který pochází z forku Percona, naopak bez problému nahradí InnoDB. Původní enginy InnoDB a MyISAM v MariaDB samozřejmě dál existují, nicméně uživatelé mají možnost zvolit si nové, relativně dobře kompatibilní alternativy. Engine Aria dokonce může být časem součástí i originálního MySQL.

Mnoho uživatelů a zejména administrátorů jistě zajímá, jaké jsou reálné zkušenosti při přechodu z MySQL na MariaDB. Sliby MariaDB jsou pořád jen sliby a realita někdy nemusí být s teoretickými předpoklady totožná. Nicméně v tomto případě se z mnohých komentářů a blogových příspěvků zdá, že autoři MariaDB vědí, co říkají, a přechod je skutečně bezproblémový. Jedinými rozdíly, kterých si administrátoři po přechodu všímají, jsou lepší výkon a stabilita.

Proč změna ve Fedoře?

Důvody, proč byla zahájena diskuze o nahrazení MySQL databází MariaDB, byly již zmíněny výše. Kromě technických zlepšení MariaDB Fedoře nabízí hlavně skutečně open-source komunitní projekt se stále se rozšiřující komunitní základnou a vedením, které ví, co dělá. Oproti Percona, Inc. nestojí za MariaDB žádná firma, která by mohla směr vývoje usměrňovat pro svoje potřeby. Na druhou stranu je budoucnost projektu založena víceméně na jednotlivcích, to je ale praxe mnoha open-source projektů.

Zkrátka a dobře, momentálně to vypadá tak, že plusy jednoznačně předčí mínusy, a zdá se proto výhodné, i s přihlédnutím k budoucnosti a nejistotě ohledně dalšího vývoje MySQL, dát přednost forku MariaDB. Ve Fedoře se tak stane ve verzi 19, která by měla spatřit světlo světa někdy na konci první poloviny roku 2013. Mimo jiné, stejný krok udělají i v další verzi OpenSUSE, důvody jsou víceméně stejné.

Jak MariaDB vyzkoušet a jak se vrátit zpět k MySQL?

Pokud patříte k nadšencům a máte nainstalovaný Rawhide (resp. Fedora 19), stačí updatovat a MariaDB se automaticky nainstaluje namísto MySQL. Struktura balíků MariaDB i jejich obsah jsou totožné s balíky MySQL, tedy např. obsah mysql-server je stejný jako mariadb-server. Stejné jsou i názvy souborů, tedy ve zmíněném mariadb-server najdeme známé soubory jako /usr/bin/mysqld_safe, systemd unit file se jmenuje mysqld.service a socket po spuštění nalezneme pod /var/lib/mysql/mysql.sock.

Ve Fedoře 18 a 17 jsou taktéž k dispozici balíky MariaDB, nicméně jejich instalace neproběhne automaticky (v repositářích těchto verzí MariaDB nemá nastaveno, že nahrazuje MySQL, pouze je s ním v explicitním konfliktu). Pokud si chceme MariaDB v těchto verzích nainstalovat, musíme ručně odinstalovat původní balíky MySQL. Kdybychom to provedli ve dvou krocích (tedy dvou yum transakcích), odinstalovali bychom i všechny balíky, které jsou na MySQL závislé, což je většinou zbytečné. Proto, abychom balíky MySQL nahradili balíky MariaDB v jedné yum transakci, použijeme příkazu yum shell.

V době psaní článku jsou balíky MariaDB stále v testovacím repositáři, povolíme proto instalování balíků z tohoto repositáře. Řekněme, že máme nainstalovány balíky mysql, mysql-libs, mysql-devel a mysql-server. Potom výměnu balíků provedeme takto:

# yum shell --enablerepo=updates-testing
> remove mysql mysql-libs mysql-devel mysql-server
> install mariadb mariadb-libs mariadb-devel mariadb-server
> run
^D

Upozornění: Vřele se doporučuje zálohovat si před upgradem důležitá data pro případ nenadálého problému. Sice nejsou takové problémy očekávané, ale jeden nikdy neví.

Jelikož balíky MariaDB mají v RPM uvedeno, že poskytují funkcionalitu MySQL ve stejné verzi (Provides: mysql[-podbalik] = %version-%release), ostatní balíky závislé na MySQL nemusejí být nijak upraveny a vše bude fungovat, jak má. Pokud zůstáváte na stejné minoritní verzi, není dokonce nutné spouštět utilitu mysql_upgrade, nicméně jejím spuštěním se nic špatného nestane.

V případě, že jste fanoušci Oraclu a nechcete MariaDB ani v Rawhide/F19, můžete si explicitně nainstalovat původní balíky MySQL. Vzhledem k tomu, že při následném updatu by yum znovu chtěl instalovat balíky MariaDB, přidáme všechny na seznam nechtěných balíků do příslušného repositáře. V případě rawhide.repo to bude vypadat následovně (byl přidán poslední řádek):

[rawhide]
name=Fedora - Rawhide - Developmental packages for the next Fedora release
failovermethod=priority
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=rawhide&arch=$basearch
enabled=0
gpgcheck=0
exclude=mariadb*

Proces návratu k originálním MySQL balíkům může potom vypadat následovně:

# yum shell
> remove mariadb mariadb-libs mariadb-devel mariadb-server
> install mysql mysql-libs mysql-devel mysql-server
> run
^D

Jaké jsou vaše názory na MariaDB?

Nyní je to tedy na vás – ať už jste weboví vývojáři, databázoví specialisté nebo administrátoři – zkuste si MariaDB a podělte se o své zkušenosti. Pokud by se ukázaly nějaké problémy, rádi bychom o nich věděli co nejdříve.

Ať už se problémy objeví, nebo ne, napište nám, co si o MariaDB a přechodu na ni ve Fedoře myslíte. Zpětná vazba z komunity je vždy vítána.

Zdroje a kde hledat více informací: