Jak zainstalować i skonfigurować MariaDB na Ubuntu i CentOS

Dowiedzmy się, jak zainstalować i skonfigurować MariaDB, popularny system zarządzania relacyjną bazą danych MySQL (RDBMS) typu open source.

Jest rozwijany przez społeczność i ma możliwość wsparcia komercyjnego. MariaDB została zaprojektowana, aby zachować wysoką kompatybilność z MySQL, chociaż istnieją pewne odchylenia.

W tym artykule omówimy instalację i konfigurację MariaDB na Ubuntu 20.xi CentOS 7.x/8.x, a na koniec omówimy kilka najlepszych praktyk dotyczących zabezpieczania i poprawiania jego wydajności.

MariaDB na Ubuntu

W Ubuntu 20.x MariaDB jest dostępna bezpośrednio z jej domyślnych repozytoriów. Do tego zadania użyjemy apt.

Najpierw zaktualizuj dane repozytoriów apt przez:

$ sudo apt update

Po zaktualizowaniu danych repozytorium uruchom:

$ sudo apt install mariadb-server

Spowoduje to zainstalowanie MariaDB i wymaganych pakietów. Potwierdź klawiszem 'Y’ dla wszelkich monitów, które możesz otrzymać podczas wykonywania poprzedniego polecenia.

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

MariaDB na CentOS 7.x

W przypadku CentOS 7.x dostępna wersja MariaDB z domyślnego repozytorium CentOS to 5.x. Zamierzamy zainstalować najnowszą dostępną wersję MariaDB.

W tym celu musimy najpierw skonfigurować dodatkowe repozytorium yum. MariaDB zapewnia łatwy sposób korzystania ze skryptu mariadb_repo_setup. Aby uzyskać konfigurację repozytorium, uruchom następujące polecenia w systemie CentOS 7.x:

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

Ten skrypt skonfiguruje wymagane repozytorium yum, aby automatycznie zainstalować najnowszą wersję MariaDB. W chwili pisania tego artykułu jest to 10.x.

Lub, jeśli chcesz przejść ręczną drogą, możesz skonfigurować ręczne repozytorium yum, tworząc nowy plik repozytorium jako:

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

Następnie dodaj następujące szczegóły do ​​pliku repozytorium i zapisz go:

[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, uruchom poniższe polecenie:

$ sudo yum install MariaDB-server

Potwierdź wszystkie monity pojawiające się podczas instalacji, wpisując „y”:

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

To kończy instalację serwera MariaDB i pakietów zależnych.

MariaDB na CentOS 8.x

W przypadku CentOS 8.x dostępna wersja z domyślnych repozytoriów to 10.3 lub nowsza. MariaDB możemy zainstalować bezpośrednio za pomocą polecenia DNF:

sudo dnf install mariadb-server

W przeciwnym razie, aby uzyskać najnowszą dostępną wersję, możesz postępować zgodnie z ręcznym sposobem podanym w poprzedniej sekcji dla CentOS 7.x i to powinno sprawić, że będziesz działać.

Uruchamianie MariaDB

Na komputerze z systemem Ubuntu będziesz mieć usługę MariaDB działającą zaraz po instalacji, podczas gdy w przypadku CentOS musimy ręcznie włączyć i uruchomić odpowiednie usługi.

W każdym razie, w przypadku Ubuntu oraz CentOS, uruchom poniższe polecenia, aby uruchomić usługę MariaDB, włączyć ją podczas rozruchu, a także ją zweryfikować:

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

Wyjście:

$ 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

W pierwszym kroku po instalacji MariaDB powinniśmy zabezpieczyć jej wdrożenie, ustawiając hasło roota, wyłączając zdalne logowanie roota, usuwając testową bazę danych oraz anonimowych użytkowników, a na koniec ponownie załadować uprawnienia.

Uruchom poniższe polecenie, aby wzmocnić MariaDB:

$ sudo mysql_secure_installation

Możesz postępować zgodnie z domyślnymi monitami z sugerowanymi działaniami, chyba że masz określone wymagania dotyczące odstępstwa.

Wyjście:

$ 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!
$

Tutaj użyjemy uwierzytelniania systemu, więc nie ustawiaj osobnego hasła roota dla MariaDB, ponieważ jest ono już bezpieczne. Jeśli potrzebujesz, zawsze możesz również ustawić osobne hasło roota.

Walidacja konfiguracji

Aby zweryfikować konfigurację MariaDB, uruchom (określ hasło, które ustawiłeś podczas uruchamiania mysql_secure_installation lub, jeśli pominięto w tym czasie, 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
$

Możesz założyć nowe konto administratora zamiast roota, jak pokazano poniżej (zmień wartość hasła na to, które zamierzasz ustawić dla konta administratora):

$ 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 przy użyciu nowego administratora jako (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 zainstalowaniu i zabezpieczeniu konfiguracji MariaDB należy podjąć działania w celu dostrojenia systemu operacyjnego i bazy danych w celu uzyskania optymalnej wydajności. To dostrojenie będzie się różnić w zależności od konfiguracji systemu, typu użytkowania, liczby użytkowników i wielu innych czynników.

Z perspektywy systemu operacyjnego niektóre parametry systemowe można skonfigurować dla MariaDB, co omówimy teraz.

Ustawienia jądra Linux – Harmonogram IO

Zalecane harmonogramy IO dla MariaDB to noop i termin. Aby to sprawdzić, użyj cat /sys/block/${DEVICE}/queue/scheduler

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

Tymczasowej zmiany można dokonać, wydając następujące polecenie, a jej efekt, jeśli zaistnieje, będzie natychmiastowy dla wydajności systemu:

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

Aby był trwały, musisz skonfigurować go w pliku konfiguracyjnym GRUB, jak pokazano poniżej w /etc/default/grub , przebudować GRUB i ponownie uruchomić system.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"

Limity zasobów — limit otwartych plików

Linux zwykle ogranicza liczbę deskryptorów plików, które każdy proces może otworzyć. W przypadku aktywnego systemu DB ten limit może łatwo przekroczyć lub wpłynąć na wydajność. W wielu systemach Linux limit ten wynosi domyślnie 1024. Ponadto istnieje opcja limitów miękkich i twardych.

Aby zwiększyć limit, możesz dodać następujące wiersze do pliku /etc/security/limits.conf:

mysql soft nofile 65535
mysql hard nofile 65535

Konieczne będzie ponowne uruchomienie systemu po tym, jak użytkownik mysql będzie mógł zobaczyć i wykorzystać nowe limity. Można to sprawdzić jako:

$ ulimit -Sn
65535
$ ulimit -Hn
65535

Limity zasobów — rozmiar pliku podstawowego

Linux ogranicza rozmiar plików podstawowych, jak w poprzednim przypadku. Ponownie ma to miękki i twardy limit, a domyślnie miękki limit jest ustawiony na 0, co skutecznie wyłącza generowanie plików rdzenia. Aby umożliwić generowanie plików podstawowych (inne konfiguracje potrzebne do generowania zrzutu rdzenia), możemy zwiększyć tę wartość w /etc/security/limits.conf jako:

mysql soft core unlimited
mysql hard core unlimited

Po ponownym uruchomieniu systemu użytkownik mysql będzie mógł zobaczyć nowe wartości za pomocą polecenia ulimit jako:

$ ulimit -Sc
unlimited
$ ulimit -Hc
unlimited

Skonfiguruj zamianę

Wartość Swappiness w systemie Linux określa prawdopodobieństwo, że system zamieni stronę z pamięci na przestrzeń wymiany skonfigurowaną w systemie. Zwykle domyślną wartością jest 60, którą można sprawdzić z:

sysctl vm.swappiness

Jego wartość może wynosić od 0 do 100, gdzie niższa wartość oznacza mniejsze prawdopodobieństwo zamiany. Na serwerze bazy danych, na którym działa tylko MariaDB, chcielibyśmy zmniejszyć tę wartość do 0, aby w jak największym stopniu uniknąć używania wymiany. Zwróć uwagę, że ustawienie wartości swappiness na 0 powinno być wykonywane ostrożnie, biorąc pod uwagę inne czynniki projektowe systemu, ponieważ w przypadku dużego użycia pamięci lub obciążenia we/wy istnieje ryzyko zabicia procesu braku pamięci (OOM) przez jądro.

Ponieważ niskie ustawienie swappiness jest zalecane dla obciążeń baz danych i jako takie dla baz danych MariaDB, zaleca się ustawienie swappiness na wartość 1. Możesz dodać poniższy wiersz w /etc/sysctl.conf, aby ta zmiana była trwała:

vm.swappiness = 1

Zmiany zaczną obowiązywać po ponownym uruchomieniu systemu, chociaż zawsze możesz to zrobić wcześniej za pomocą polecenia sysctl:

sysctl -w vm.swappiness=1

Optymalizacje systemu plików

W przypadku MariaDB najlepsze systemy plików Linuksa są ogólnie uważane za ext4, XFS i Btrfs, które są zawarte w głównym jądrze Linuksa i są szeroko obsługiwane. Te systemy plików są dostępne w większości dystrybucji Linuksa. Każdy system plików ma swoje unikalne właściwości i funkcje i może być wybrany na podstawie wymagań po odpowiednim przejrzeniu.

Co więcej, jest mało prawdopodobne, że będziesz musiał rejestrować czas dostępu do pliku na serwerze bazy danych. Możemy to wyłączyć, aby poprawić wydajność. Możesz zamontować odpowiedni system plików za pomocą opcji noatime lub dodać go w opcjach montowania w pliku /etc/fstab, aby był trwały.

Optymalizacja bazy danych

Istnieje kilka strojów wewnętrznych działania MariaDB, które można dostosować do własnych wymagań i potrzeb.

Kilka z nich omówimy tutaj.

MariaDB jest w większości konfigurowana przez plik my.cnf.

W Ubuntu możesz znaleźć my.cnf pod adresem:

/etc/mysql/my.cnf

Podczas gdy na CentOS znajduje się pod adresem:

/etc/my.cnf

Szczegółową dokumentację dotyczącą dostępnych zmiennych do strojenia w pliku konfiguracyjnym można znaleźć tutaj tutaj.

Dużo zależy też od rodzaju silnika wykorzystywanego przez MariaDB, czyli MyISAM i InnoDB czy XtraDB. Oba mają własne zestawy zalet i wad, a wybór jednego zależy od wymagań bazy danych i aplikacji.

Powinniśmy ustawić innodb_buffer_pool_size na około 80% twojej pamięci. Gwarantuje to, że 80% zestawu roboczego znajduje się w pamięci.

Niektóre z innych ważnych parametrów dostrajalnych 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 szczegółów na temat dostrajania zmiennych InnoDB lub XtraDB można znaleźć tutaj. Odwołaj się do tego przewodnik dla wszystkich dostępnych opcji dostrajania MariaDB.

Jeśli jesteś zainteresowany, zapoznaj się z tymi zasobami, aby nauczyć się SQL i NoSQL.

Wniosek

MariaDB to jeden z popularnych wyborów, jeśli chodzi o relacyjny DBMS. Bycie open-source z różnorodną społecznością jeszcze bardziej do tego przyczynia.

Aby dowiedzieć się więcej, zapoznaj się z jego dokumentacja który obejmuje takie tematy, jak podstawowy SQL, migracja, administracja MariaDB, wysoka dostępność, dostrajanie wydajności, aparaty pamięci masowej, programowanie i dostosowywanie. Możesz również wyłączyć rejestrowanie binarne, jeśli nie używasz klastra.