Jak zainstalować i skonfigurować MariaDB na Ubuntu i CentOS

Prześledźmy proces instalacji i konfiguracji MariaDB, cenionego, otwartego systemu zarządzania relacyjnymi bazami danych (RDBMS), stanowiącego alternatywę dla MySQL.

MariaDB rozwija się dzięki aktywnemu zaangażowaniu społeczności oraz oferuje komercyjne opcje wsparcia. Została zaprojektowana z myślą o zachowaniu wysokiej kompatybilności z MySQL, choć w pewnych aspektach występują różnice.

W tym artykule skupimy się na krokach instalacji i konfiguracji MariaDB w systemach Ubuntu 20.x oraz CentOS 7.x/8.x. Ponadto, przedstawimy kluczowe praktyki związane z zabezpieczaniem i optymalizacją jej wydajności.

MariaDB w systemie Ubuntu

W systemie Ubuntu 20.x MariaDB jest dostępna do pobrania bezpośrednio z domyślnych repozytoriów. Do przeprowadzenia instalacji wykorzystamy menedżera pakietów apt.

Na wstępie, dokonaj aktualizacji danych repozytoriów apt, używając następującego polecenia:

$ sudo apt update

Po odświeżeniu informacji o pakietach, zainstaluj MariaDB, wykonując:

$ sudo apt install mariadb-server

To polecenie zainicjuje pobieranie i instalację MariaDB oraz niezbędnych pakietów zależnych. Potwierdź operację klawiszem 'Y’, gdy zostaniesz o to poproszony podczas procesu.

Do you want to continue? [Y/n] Y

MariaDB w CentOS 7.x

W przypadku systemu CentOS 7.x, domyślne repozytorium udostępnia starszą wersję MariaDB (5.x). Zamiast tego, skoncentrujemy się na instalacji najnowszej dostępnej edycji.

Aby to osiągnąć, konieczna będzie konfiguracja dodatkowego repozytorium yum. MariaDB udostępnia skrypt o nazwie `mariadb_repo_setup`, który ułatwia ten proces. W celu konfiguracji repozytorium w CentOS 7.x, wykonaj kolejno:

$ sudo yum install wget
$ wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
$ chmod +x mariadb_repo_setup
$ sudo ./mariadb_repo_setup

Ten skrypt automatycznie skonfiguruje potrzebne repozytorium yum, co pozwoli na zainstalowanie najnowszej wersji MariaDB, która w chwili pisania tego artykułu jest oznaczona numerem 10.x.

Alternatywnie, jeśli preferujesz ręczną konfigurację, możesz utworzyć nowy plik repozytorium yum, wykonując:

$ sudo vi /etc/yum.repos.d/MariaDB.repo

Następnie, dodaj poniższe informacje do utworzonego pliku i zapisz zmiany:

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Teraz, aby zainstalować MariaDB, użyj poniższego polecenia:

$ sudo yum install MariaDB-server

Potwierdź wszystkie wyświetlane monity, wpisując „y”.

Is this ok [y/d/N]: y

W ten sposób zakończy się instalacja serwera MariaDB wraz z wszystkimi niezbędnymi pakietami.

MariaDB w CentOS 8.x

W systemie CentOS 8.x, domyślne repozytoria dostarczają wersję 10.3 lub nowszą. Instalacja MariaDB może być przeprowadzona bezpośrednio za pomocą menedżera pakietów DNF:

sudo dnf install mariadb-server

Jeśli natomiast zależy Ci na najnowszej dostępnej wersji, możesz skorzystać z metody ręcznej konfiguracji repozytorium, opisanej w poprzedniej sekcji dotyczącej CentOS 7.x.

Uruchamianie MariaDB

W systemie Ubuntu, usługa MariaDB powinna być uruchomiona automatycznie po zakończeniu instalacji. W systemie CentOS konieczne jest ręczne włączenie i uruchomienie odpowiednich usług.

Niezależnie od systemu, w celu uruchomienia, włączenia przy starcie oraz weryfikacji stanu usługi MariaDB, użyj poniższych poleceń:

$ sudo systemctl start mariadb.service
$ sudo systemctl enable mariadb.service
$ sudo systemctl status mariadb.service

Przykładowy wynik:

$ sudo systemctl start mariadb.service
$ sudo systemctl enable mariadb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
$ sudo systemctl status mariadb.service
● mariadb.service - MariaDB 10.5.8 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: active (running) since Thu 2020-12-31 13:20:04 IST; 13s ago
     Docs: man:mariadbd(8)
           https://mariadb.com/kb/en/library/systemd/
 Main PID: 13521 (mariadbd)
   Status: "Taking your SQL requests now..."
   CGroup: /system.slice/mariadb.service
           └─13521 /usr/sbin/mariadbd

Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] InnoDB: 10.5.8 started; log sequence number 45118; transaction id 20
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Plugin 'FEEDBACK' is disabled.
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] InnoDB: Buffer pool(s) load completed at 201231 13:20:04
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Server socket created on IP: '::'.
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Reading of all Master_info entries succeeded
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Added new Master_info '' to hash table
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] /usr/sbin/mariadbd: ready for connections.
Dec 31 13:20:04 centos7vm mariadbd[13521]: Version: '10.5.8-MariaDB'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MariaDB Server
Dec 31 13:20:04 centos7vm systemd[1]: Started MariaDB 10.5.8 database server.
$

Zabezpieczanie MariaDB

Zaraz po instalacji MariaDB, niezwykle ważne jest jej odpowiednie zabezpieczenie. W ramach tego procesu należy ustawić hasło użytkownika root, uniemożliwić zdalne logowanie dla tego użytkownika, usunąć testową bazę danych oraz anonimowych użytkowników, a następnie odświeżyć uprawnienia.

Aby zwiększyć bezpieczeństwo MariaDB, wykonaj poniższe polecenie:

$ sudo mysql_secure_installation

Podążaj za wyświetlanymi monitami, zatwierdzając sugerowane działania, chyba że masz konkretne powody, aby postąpić inaczej.

Przykładowy wynik:

$ sudo mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n
 ... skipping.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] n
 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
$

W przedstawionym przykładzie używamy uwierzytelniania systemowego, pomijając ustawianie oddzielnego hasła root dla MariaDB. W razie potrzeby, możesz ustawić dedykowane hasło.

Weryfikacja Konfiguracji

Aby upewnić się, że MariaDB jest prawidłowo skonfigurowana, wykonaj poniższe polecenie (wprowadzając hasło ustawione w ramach `mysql_secure_installation` lub, jeżeli zostało to pominięte, użyj poświadczeń administratora systemu):

$ sudo mysqladmin -u root -p version
Enter password:
mysqladmin  Ver 9.1 Distrib 10.5.8-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Server version          10.5.8-MariaDB
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/lib/mysql/mysql.sock
Uptime:                 53 min 17 sec

Threads: 2  Questions: 77  Slow queries: 0  Opens: 20  Open tables: 14  Queries per second avg: 0.024
$

Zamiast korzystać z konta root, możesz utworzyć dedykowane konto administratora, wykonując poniższe kroki (pamiętaj o zmianie wartości hasła na wybrane):

$ sudo mariadb
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 44
Server version: 10.5.8-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]> GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
Query OK, 0 rows affected (0.003 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> exit
Bye
$

Zweryfikuj dostęp, logując się jako nowy administrator (wprowadź hasło ustawione w poprzednim kroku):

$ mysqladmin -u admin -p version
Enter password:
mysqladmin  Ver 9.1 Distrib 10.5.8-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Server version          10.5.8-MariaDB
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/lib/mysql/mysql.sock
Uptime:                 56 min 59 sec

Threads: 2  Questions: 83  Slow queries: 0  Opens: 20  Open tables: 14  Queries per second avg: 0.024
$

Optymalizacja Systemu Operacyjnego

Po instalacji i zabezpieczeniu MariaDB, warto podjąć działania w celu optymalizacji systemu operacyjnego oraz samej bazy danych. Należy pamiętać, że proces dostrajania będzie różnił się w zależności od konfiguracji systemu, rodzaju użytkowania, liczby użytkowników oraz wielu innych czynników.

Z perspektywy systemu operacyjnego, istnieje kilka parametrów, które można dostosować dla MariaDB, co teraz omówimy.

Ustawienia Jądra Linux – Harmonogram IO

Rekomendowane harmonogramy IO dla MariaDB to `noop` oraz `deadline`. Aby to sprawdzić, użyj polecenia `cat /sys/block/${DEVICE}/queue/scheduler`:

$ sudo cat /sys/block/sda/queue/scheduler
[mq-deadline] kyber bfq none
$

Tymczasową zmianę można wprowadzić, wykonując poniższe polecenie. Efekt tej zmiany, jeśli wystąpi, będzie natychmiastowy:

$ sudo echo noop > /sys/block/sda/queue/scheduler

Aby zmiana była trwała, należy zmodyfikować plik konfiguracyjny GRUB (znajduje się w `/etc/default/grub`), przebudować GRUB oraz ponownie uruchomić system.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"

Limity Zasobów – Limit Otwartych Plików

Linux standardowo ogranicza liczbę deskryptorów plików, które proces może otworzyć. W przypadku intensywnie używanej bazy danych, limit ten może zostać łatwo przekroczony, co negatywnie wpłynie na wydajność. W wielu systemach Linux domyślny limit wynosi 1024. Istnieją także limity miękkie oraz twarde.

Aby zwiększyć limit, dodaj poniższe wiersze do pliku `/etc/security/limits.conf`:

mysql soft nofile 65535
mysql hard nofile 65535

Po ponownym uruchomieniu systemu, użytkownik `mysql` będzie mógł korzystać z nowych limitów. Można to sprawdzić za pomocą poleceń:

$ ulimit -Sn
65535
$ ulimit -Hn
65535

Limity Zasobów – Rozmiar Pliku Podstawowego (core dump)

Podobnie jak w przypadku limitów plików, Linux ogranicza rozmiar plików podstawowych. Także tutaj mamy limity miękkie i twarde. Domyślnie, miękki limit jest ustawiony na 0, co efektywnie uniemożliwia generowanie plików core dump. Aby umożliwić generowanie tych plików ( potrzebne są dodatkowe konfiguracje), można zwiększyć ten limit w pliku `/etc/security/limits.conf`:

mysql soft core unlimited
mysql hard core unlimited

Po restarcie systemu, użytkownik `mysql` będzie mógł sprawdzić nowe ustawienia za pomocą poleceń:

$ ulimit -Sc
unlimited
$ ulimit -Hc
unlimited

Konfiguracja Swappiness

Wartość `swappiness` w systemie Linux decyduje o tym, jak często system będzie korzystał z przestrzeni wymiany (swap) zamiast z pamięci RAM. Domyślnie, wartość ta wynosi 60 i można ją sprawdzić za pomocą polecenia:

sysctl vm.swappiness

Możliwe wartości mieszczą się w zakresie od 0 do 100, gdzie niższa wartość oznacza mniejsze prawdopodobieństwo korzystania z przestrzeni wymiany. Na serwerze bazy danych, gdzie działa jedynie MariaDB, preferowane jest zmniejszenie tej wartości do 0, aby uniknąć użycia swapa w maksymalnym możliwym stopniu. Ustawianie `swappiness` na 0 wymaga jednak ostrożności, ponieważ przy dużym obciążeniu pamięci lub wejścia/wyjścia może to skutkować wywołaniem przez jądro procedury OOM (Out Of Memory) i potencjalnym ubiciem procesu.

Ponieważ niskie ustawienia swappiness są zalecane dla baz danych, w przypadku MariaDB rekomenduje się ustawienie tej wartości na 1. Aby zmiana była trwała, dodaj poniższy wiersz do pliku `/etc/sysctl.conf`:

vm.swappiness = 1

Zmiany zaczną obowiązywać po ponownym uruchomieniu systemu, chociaż można je wprowadzić natychmiast za pomocą polecenia `sysctl`:

sysctl -w vm.swappiness=1

Optymalizacje Systemu Plików

Najlepszymi systemami plików dla MariaDB są generalnie ext4, XFS oraz Btrfs, które są integralną częścią jądra Linux i są szeroko obsługiwane. Te systemy plików są dostępne w większości dystrybucji Linuksa. Każdy system ma swoje unikalne cechy i funkcje, które należy wziąć pod uwagę przy wyborze.

Ponadto, na serwerze bazy danych zazwyczaj nie ma potrzeby rejestrowania czasów dostępu do plików. Wyłączenie tej funkcji może poprawić wydajność. Można to osiągnąć, montując system plików z opcją `noatime` lub dodając tę opcję do pliku `/etc/fstab`, aby zmiana była trwała.

Optymalizacja Bazy Danych

MariaDB oferuje wiele parametrów wewnętrznych, które można dostosować, aby spełnić specyficzne wymagania i potrzeby.

Poniżej omówimy kilka z nich.

Konfiguracja MariaDB w dużej mierze opiera się na pliku `my.cnf`.

W Ubuntu, plik `my.cnf` znajduje się pod adresem:

/etc/mysql/my.cnf

Natomiast w CentOS, jego lokalizacja to:

/etc/my.cnf

Szczegółową dokumentację dotyczącą dostępnych zmiennych konfiguracyjnych można znaleźć tutaj.

Wiele zależy również od silnika, który jest używany przez MariaDB, czyli MyISAM i InnoDB lub XtraDB. Każdy z nich ma swoje zalety i wady, a wybór jednego zależy od wymagań bazy danych i aplikacji.

Warto ustawić parametr `innodb_buffer_pool_size` na około 80% dostępnej pamięci RAM. Zapewni to, że 80% tzw. zbioru roboczego będzie przechowywane w pamięci.

Inne ważne parametry, które można dostrajać, to:

innodb_log_file_size
innodb_flush_method
innodb_thread_sleep_delay
innodb_adaptive_max_sleep_delay
innodb_buffer_pool_instances
innodb_buffer_pool_size
innodb_max_dirty_pages_pct_lwm
innodb_read_ahead_threshold
innodb_thread_concurrency

Więcej informacji o dostrajaniu zmiennych InnoDB lub XtraDB znajdziesz tutaj. Sprawdź także ten przewodnik, aby poznać wszystkie dostępne opcje dostrajania MariaDB.

Jeśli jesteś zainteresowany, warto zapoznać się z zasobami, które pomogą Ci w nauce SQL i NoSQL.

Podsumowanie

MariaDB to popularny wybór wśród relacyjnych systemów zarządzania bazami danych. Jej otwarty kod i zaangażowana społeczność przyczyniają się do jej popularności.

Aby zgłębić temat, warto sięgnąć do dokumentacji, która obejmuje takie zagadnienia jak podstawy SQL, migracja, administracja MariaDB, wysoka dostępność, optymalizacja wydajności, mechanizmy składowania danych, programowanie i dostosowywanie. Jeżeli nie korzystasz z klastra, możesz również wyłączyć logowanie binarne.


newsblog.pl