Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL kontra MariaDB

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.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. W zapytaniach MySQL, po co używać join zamiast gdzie?

  2. Jak wybrać wiersze ze znacznikiem czasu bieżącego dnia?

  3. Czy w MySQL powinienem cytować liczby, czy nie?

  4. Wprowadzenie do wysokiej dostępności baz danych dla MySQL i MariaDB

  5. Jak wykonać kopię zapasową i przywrócić bazę danych MySQL?