MySQL a MariaDB
Poprzednia historia MySQL i MariaDB
MySQL i MariaDB mają wspólną historię, obie noszą nazwy córek dewelopera Michaela Wideniusa, My i Marii. MySQL został stworzony w 1995 roku przez szwedzką firmę programistyczną MySQL AB . Z biegiem lat zyskał na popularności i stał się standardem dla systemu zarządzania relacyjnymi bazami danych typu open source. W 2008 roku Sun kupił MySQL AB (i ostatecznie MySQL) za 1 miliard dolarów. Niedługo po tym, jak Sun został zakupiony przez Oracle w kwietniu 2009 roku. W tym momencie Oracle, konkurencyjny system bazodanowy, stał się właścicielem MySQL. To niepokoiło pierwotnych programistów, widząc, jak czuli, że przyszłość MySQL jest zagrożona. Kierując się zasadami open source, zdecydowali się na „fork” MySQL i stworzenie MariaDB. I masz to, MySQL i MariaDB mają wspólną historię!
Mamy świetny samouczek, jak zainstalować MariaDB, aby zastąpić MySQL w WHM.
Wersjonowanie replikacji MySQL i MariaDB
Slave↓ Master→ | MariaDB-5.5 | MariaDB-10.0 | MariaDB-10.1 | MariaDB-10.2 | MySQL-5.6 | MySQL-5.7 | MySQL-8.0 |
---|---|---|---|---|---|---|---|
MariaDB-5.5 | Ok | Nie | Nie | Nie | Nie | Nie | Nie |
MariaDB-10.0 | Ok | Ok | Ok | ||||
MariaDB-10.1 | Ok | Ok | Ok | Ok | |||
MariaDB-10.2 | Ok | Ok | Ok | Ok | Ok | Ok |
Porównanie funkcji MySQL i MariaDB
Więcej silników pamięci masowej
MariaDB zawiera standardowe silniki pamięci masowej MyISAM, BLACKHOLE, CSV, MEMORY, ARCHIVE i MERGE. Zawiera również niektóre z mniej popularnych silników pamięci masowej, takie jak;
- Cassandra (MariaDB 10.0)
- Pająk (MariaDB 10.0+)
- SEKWENCJA (MariaDB 10.0+)
- POŁĄCZ (MariaDB 10.0+)
- TokuDB (MariaDB 5.5+)
- SphinxSE (MariaDB 5.2+)
- OQGRAPH (niedostępne w MariaDB 5.5)
- FederatedX (Upuść zamiennik dla Federated)
- Aria (zastąpienie MyISAM z ulepszonym buforowaniem)
- MyRocks (silnik pamięci masowej MariaDB 10.2 z ulepszoną kompresją)
- ColumnStore (silnik pamięci masowej zorientowany na kolumny zoptymalizowany pod kątem hurtowni danych)
Ulepszenia prędkości
MariaDB ma wiele ulepszonych ulepszeń w stosunku do MySQL podczas porównywania funkcji Optymalizatora:
Funkcja | MariaDB 5.3/5.5 | MariaDB 10.0 | MySQL 5.5 | MySQL 5.6 |
---|---|---|---|---|
Optymalizacja dostępu do dysku | ||||
Przesunięcie w dół warunku indeksu (ICP) | TAK | TAK | – | TAK |
Disk-sweep Odczyt wielozakresowy (DS-MRR) | TAK | TAK | – | TAK |
DS-MRR z pobieraniem według kolejności kluczy | TAK | TAK | – | – |
Scalanie_indeksów / Przecięcie_sortowania | TAK | TAK | – | – |
Wybór zakresu na podstawie kosztów vs. index_merge | TAK | TAK | – | – |
ZAMÓW WEDŁUG … LIMITU | – | TAK | – | TAK |
Użyj rozszerzonych (ukrytych) kluczy podstawowych dla innodb/xtradb | TAK (5.5) | TAK | – | – |
Optymalizacja dołączania | ||||
Dostęp do klucza wsadowego (BKA) | TAK | TAK | – | TAK |
Zablokuj połączenie haszujące | TAK | TAK | – | – |
Limity pamięci ustawione przez użytkownika we wszystkich buforach dołączania | TAK | TAK | – | – |
Zastosuj wczesne warunki włączenia zewnętrznego stołu | TAK | TAK | – | – |
Warunki odrzucania wartości NULL przetestowane wcześnie pod kątem wartości NULL | TAK | TAK | – | – |
Optymalizacja podzapytań | ||||
Istnieje | TAK | TAK | TAK | TAK |
Łączenie częściowe | TAK | TAK | – | TAK |
Materializacja | TAK | TAK | – | TAK |
Materializacja świadoma NULL | TAK | TAK | – | – |
Wybór kosztów materializacji w porównaniu z istniejącymi | TAK | TAK | – | TAK |
Pamięć podzapytania | TAK | TAK | – | – |
Szybkie wyjaśnienie za pomocą podzapytań | TAK | TAK | – | – |
ISTNIEJE do WEJŚCIA | – | TAK | – | – |
Optymalizacja tabel/widoków pochodnych | ||||
Opóźniona materializacja tabel pochodnych / widoków zmaterializowanych | TAK | TAK | – | TAK |
Natychmiastowe WYJAŚNIENIE dla tabel pochodnych | TAK | TAK | – | TAK |
Tabela pochodna z optymalizacją kluczy | TAK | TAK | – | TAK |
Pola widoków z możliwością łączenia i tabel pochodnych używanych w optymalizacjach równości | TAK | TAK | – | – |
Kontrola wykonania | ||||
LIMIT ZBADANE WIERSZE rows_limit | TAK (5.5) | TAK | – | – |
Sterowanie optymalizatorem (przełącznik optymalizatora) | ||||
Systematyczna kontrola wszystkich strategii optymalizacji | TAK | TAK | – | częściowe |
WYJAŚNIJ ulepszenia | ||||
Wyjaśnij USUŃ, WSTAW, ZAMIEŃ i AKTUALIZUJ | – | Częściowo | – | TAK |
WYJAŚNIJ w formacie JSON | – | – | – | TAK |
Bardziej szczegółowe i spójne WYJAŚNIENIE dla podzapytań | TAK | TAK | – | – |
Śledzenie optymalizatora | ||||
Śledzenie optymalizatora | – | – | – | TAK |
- Replikacja równoległa — nowy w 10,0; odbywa się w trzech częściach:zdarzenia replikacji są odczytywane przez wątek we/wy i umieszczane w kolejce w dzienniku przekaźnika, pobierane indywidualnie przez wątek SQL z dziennika przekaźnika, a każde zdarzenie jest stosowane do urządzenia podrzędnego replikującego zmiany na urządzeniu nadrzędnym.
- Ulepszenia wydajności obejmują lepszy asynchroniczny podsystem IO InnoDB w systemie Windows.
- Indeksy dla aparatu MEMORY(HEAP) są szybsze. Najnowsze poprawki zostały zastosowane w MariaDB 5.5 i MySQL 5.7.
- Segmentowana pamięć podręczna kluczy dla MyISAM została dodana w MariaDB 5.2. Poprawiło to wydajność w tabelach MyISAM do 4x.
- Od wersji 10.0.13 regulowany rozmiar skrótu dla MyISAM i Aria skraca czas wyłączania, jeśli używasz wielu tabel MyISAM/Aria z opóźnionymi kluczami.
- Dzięki TABELI SUMA KONTROLNEJ przy użyciu opcji SZYBKIE szybkość jest poprawiona.
- Wydajność została poprawiona dzięki konwersji zestawu znaków i usunięciu konwersji (gdy nie były potrzebne). Ogólna poprawa szybkości wynosi około 1-5%, ale może być szybsza przy dużych zestawach wyników.
- Pula wątków w MariaDB 5.1/MariaDB 5.5 umożliwia działanie MariaDB z ponad 200 000 połączeń, co prowadzi do poprawy szybkości przy korzystaniu z wielu połączeń.
- Dodane ulepszenia połączeń klienckich od wersji MariaDB 10.1 i MariaDB 10.2.
- Niektóre ulepszenia kodu DBUG w MariaDB pomagają przyspieszyć działanie kodu z wkompilowanym, ale nie używanym debugowaniem.
- Korzystanie z silnika pamięci Aria przy użyciu wewnętrznych tabel tymczasowych pozwala na lepszą wydajność.
- Zestaw testów działa szybciej, nawet z rozszerzoną listą testów.
Nowe funkcje i rozszerzenia
Lepsze testowanie
MariaDB zawiera więcej testów w zestawie testowym niż MySQL. Nieprawidłowe i wszelkie niepotrzebne testy zostały usunięte. Problemy z zestawem testowym zostały rozwiązane.
Mniej błędów
Obecnie społeczność MariaDB jest czujna i pracuje nad naprawą błędów tak szybko i tak dokładnie, jak to możliwe. Dodatkowo ostrzeżenia kompilatora zostały również zmniejszone w wyniku zmniejszenia liczby błędów.
Otwarte źródło
Cały kod źródłowy MariaDB jest wydany na licencji GPL, LGPL lub BSD. Podczas gdy MySQL ma zamknięte moduły źródłowe w wersji Enterprise Edition, MariaDB nie ma żadnych modułów zamkniętego źródła. MariaDB zawierała wszystkie funkcje zamkniętego źródła zawarte w MySQL 5.5 Enterprise Edition w swojej wersji open source. MariaDB zawiera przypadki testowe dla wszystkich nowych naprawionych błędów. MySQL nie dostarcza przypadków testowych dla błędów naprawionych w MySQL 5.5. MariaDB upublicznia wszystkie przyszłe plany rozwoju, w tym błędy i ich poprawki. MariaDB ma dużą społeczność i ta społeczność programistów obejmuje wielu różnych współpracowników, podczas gdy wszystkie zobowiązania do MySQL wydają się pochodzić od pracowników Oracle. Biblioteki klienckie MySQL są wydawane na licencji GPL, która zabrania łączenia się z aplikacjami o zamkniętym kodzie źródłowym. Wręcz przeciwnie, MariaDB licencjonuje biblioteki klienckie na licencji LGPL, umożliwiając łączenie z oprogramowaniem o zamkniętym kodzie źródłowym.
Problemy ze zgodnością między MariaDB i MySQL
MariaDB została zaprojektowana jako bezpośredni zamiennik MySQL i była rozwidleniem oryginalnej bazy kodu MySQL. Oznacza to, że przejście z MySQL na MariaDB jest stosunkowo prostym procesem. Wystarczy odinstalować MySQL i zainstalować MariaDB. Ponieważ jest to zamiennik typu drop-in, nie ma potrzeby konwertowania żadnych danych. Programiści MariaDB dokonują comiesięcznego scalania kodu MySQL, aby zapewnić jego kompatybilność. Istnieją różne niezgodności między wersjami MySQL i MariaDB, mimo że wersje zostały zaprojektowane tak, aby były kompatybilne według ich odpowiednich numerów wersji (na przykład MySQL 5.1 -> MariaDB 5.1 i MySQL 5.5 -> MariaDB 5.5).
Niezgodności między MariaDB 10.0 i MariaDB 5.5 / MySQL 5.5
- Składnia SET OPTION jest przestarzała w MariaDB 10.0 i MySQL 5.6. Użyj tylko SET.
Niezgodności między MariaDB 10.0 i MySQL 5.6
- Wszystkie pliki binarne MySQL (MySQLd, myisamchk itp.) wyświetlają ostrzeżenie, jeśli użyje się przedrostka opcji (takiego jak –big-table zamiast –big-tables). Pliki binarne MariaDB działają w taki sam sposób, jak większość innych poleceń systemu Unix i nie dają ostrzeżeń podczas używania unikalnych przedrostków.
- GTID MariaDB nie jest kompatybilny z MySQL 5.6. Oznacza to, że nie można mieć MySQL 5.6 jako niewolnika dla MariaDB 10.0. Jednak MariaDB 10.0 może być niewolnikiem MySQL 5.6 lub dowolnej wcześniejszej wersji MySQL/MariaDB.
- Replikacja wieloźródłowa MariaDB 10.0 nie jest obsługiwana w MySQL 5.6.
- Kolumny dynamiczne MariaDB 10.0 nie są obsługiwane przez MySQL 5.6.
- Aby CREATE TABLE… SELECT działało w ten sam sposób w replikacji opartej na instrukcjach i wierszach, jest domyślnie wykonywane jako CREATE OR REPLACE TABLE na urządzeniu podrzędnym. Jedną z korzyści tego jest to, że jeśli niewolnik umrze w trakcie CREATE … SELECT, będzie mógł kontynuować.
- Można użyć zmiennej slave-ddl-exec-mode, aby określić sposób replikacji CREATE TABLE i DROP TABLE.
- Zobacz także szczegółowy podział różnic w zmiennych systemowych między MariaDB 10.0 i MySQL 5.6.
- MySQL 5.6 ma domyślnie włączony schemat wydajności. Ze względu na wydajność MariaDB 10.0 ma to domyślnie wyłączone. Możesz to włączyć, uruchamiając MySQLd z opcją –performance-schema.
- MariaDB 10.0 nie obsługuje wtyczki MySQL Memcached.
- Użytkownicy utworzeni za pomocą algorytmu hasła SHA256 MySQL nie mogą być używani w MariaDB 10.0.
- MariaDB 10.0 nie obsługuje opóźnionej replikacji – MDEV-7145.
Niezgodności między MariaDB 10.1 i MySQL 5.7
- MariaDB 10.1 nie obsługuje formatu JSON MySQL 5.7.
- Szyfrowanie InnoDB w MariaDB 10.1 jest zaimplementowane inaczej niż szyfrowanie InnoDB w MySQL 5.7.
- MariaDB 10.1 nie obsługuje wtyczek pełnotekstowego parsera ngram i MeCab — MDEV-10267, MDEV-10268.
- MariaDB 10.1 nie obsługuje wielu wyzwalaczy dla tabeli — MDEV-6112.
- MariaDB 10.1 nie obsługuje funkcji CREATE TABLESPACE dla InnoDB.
Niezgodności między MariaDB 10.2 i MySQL 5.7
- Różnice zmiennych systemowych między MariaDB 10.2 i MySQL 5.7.
- Różnice funkcjonalne między MariaDB 10.2 i MySQL 5.7.
- W wersji 10.2 dodano wiele wyzwalaczy na tabelę
- Szyfrowanie MariaDB InnoDB jest zaimplementowane inaczej niż szyfrowanie InnoDB w MySQL 5.7.
- MariaDB przechowuje JSON jako prawdziwy tekst, a nie w formacie binarnym jak MySQL. Powodem jest to, że nasze funkcje JSON są znacznie szybsze niż MySQL, więc nie musieliśmy widzieć potrzeby przechowywania rzeczy w formacie binarnym, ponieważ dodaje to dużo złożoności podczas manipulowania obiektami JSON.
- MariaDB 10.2 nie obsługuje pełnotekstowych wtyczek parsera ngram i MeCab – MDEV-10267, MDEV-10268.
- MariaDB 10.2 nie obsługuje wtyczki MySQL X.
- MariaDB 10.2 nie obsługuje ogólnych obszarów tabel MySQL.
- Zobacz również Niezgodności między MariaDB 10.1 i MySQL 5.7.