Jak nainstalovat a nakonfigurovat MariaDB na Ubuntu a CentOS

Pojďme se naučit, jak nainstalovat a nakonfigurovat MariaDB, open-source populární MySQL Relational Database Management System (RDBMS).

Je komunitně vyvinutý a má možnost komerční podpory. MariaDB má zůstat vysoce kompatibilní s MySQL, i když existují určité odchylky.

V tomto článku se budeme zabývat instalací a konfigurací MariaDB na Ubuntu 20.xa CentOS 7.x/8.xa na konci zhodnotíme některé osvědčené postupy pro zabezpečení a zlepšení jeho výkonu.

MariaDB na Ubuntu

Na Ubuntu 20.x je MariaDB dostupná přímo ze svých výchozích úložišť. Pro tento úkol použijeme apt.

První aktualizace dat repozitářů apt:

$ sudo apt update

Po aktualizaci dat úložiště spusťte:

$ sudo apt install mariadb-server

Tím se nainstaluje MariaDB a požadované balíčky. Potvrďte pomocí ‚Y‘ pro všechny výzvy, které se mohou zobrazit během provádění předchozího příkazu.

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

MariaDB na CentOS 7.x

Pro CentOS 7.x je dostupná verze MariaDB z výchozího úložiště CentOS 5.x. Chystáme se nainstalovat nejnovější dostupnou verzi MariaDB.

K tomu musíme nejprve nakonfigurovat další úložiště yum. MariaDB poskytuje snadný způsob použití skriptu mariadb_repo_setup. Chcete-li získat nastavení úložiště, spusťte v systému CentOS 7.x následující příkazy:

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

Tento skript nastaví požadované úložiště yum pro automatickou instalaci nejnovější verze MariaDB. V době psaní tohoto článku je to 10.x.

Nebo v případě, že chcete jít ruční cestou, můžete nakonfigurovat ruční úložiště yum vytvořením nového souboru repo jako:

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

Poté do souboru repo přidejte následující podrobnosti a uložte jej:

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

Nyní pro instalaci MariaDB spusťte níže uvedený příkaz:

$ sudo yum install MariaDB-server

Všechny výzvy, které se objeví během instalace, potvrďte zadáním „y“:

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

Tím je instalace serveru MariaDB a závislých balíčků dokončena.

MariaDB na CentOS 8.x

Pro CentOS 8.x je dostupná verze z výchozích úložišť 10.3 nebo novější. Můžeme přímo nainstalovat MariaDB pomocí příkazu DNF:

sudo dnf install mariadb-server

Chcete-li získat nejnovější dostupnou verzi, můžete postupovat manuálně, jak je uvedeno v předchozí části pro CentOS 7.xa to by vám mělo pomoci.

Spuštění MariaDB

Na počítači Ubuntu budete mít službu MariaDB spuštěnou hned po instalaci, zatímco pro CentOS musíme příslušné služby povolit a spustit ručně.

V každém případě pro Ubuntu i CentOS spusťte níže uvedené příkazy, abyste spustili službu MariaDB, povolili ji při spouštění a ověřili ji:

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

Výstup:

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

Zabezpečení MariaDB

Jako první krok po instalaci MariaDB bychom měli zabezpečit její nasazení nastavením rootovského hesla, zakázáním vzdáleného přihlášení roota, odebráním testovací databáze i anonymních uživatelů a nakonec opětovným načtením oprávnění.

Spusťte níže uvedený příkaz a zpevněte MariaDB:

$ sudo mysql_secure_installation

Pokud nemáte konkrétní požadavek na odchýlení, můžete se řídit výchozími výzvami s navrhovanými akcemi.

Výstup:

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

Zde použijeme autentizaci systému, takže pro MariaDB nenastavujte samostatné heslo root, protože je již zabezpečené. Pokud potřebujete, můžete vždy nastavit také samostatné root heslo.

Ověření nastavení

Chcete-li ověřit své nastavení MariaDB, spusťte (zadejte heslo, které jste nastavili při spuštění mysql_secure_installation, nebo, pokud bude v tuto chvíli přeskočeno, použijte přihlašovací údaje kořenového adresáře vašeho systému):

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

Můžete si nastavit nový administrátorský účet namísto root, jak je uvedeno níže (změňte hodnotu hesla na heslo, které chcete nastavit pro administrátorský účet):

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

Ověřte přístup u nového administrátora jako (zadejte heslo nastavené v předchozím 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
$

Optimalizace OS

Po instalaci a zabezpečení nastavení MariaDB byste měli podniknout kroky k vyladění operačního systému a databáze pro optimální výkon. Toto ladění se bude lišit v závislosti na konfiguraci vašeho systému, typu použití, počtu uživatelů a řadě dalších faktorů.

Z pohledu operačního systému lze některé systémové parametry nakonfigurovat pro MariaDB, o čemž budeme nyní diskutovat.

Nastavení Linuxového jádra – IO Scheduler

Doporučené IO plánovače pro MariaDB jsou noop a deadline. Pro kontrolu použijte cat /sys/block/${DEVICE}/queue/scheduler

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

Dočasnou změnu lze provést zadáním následujícího příkazu a její účinek, pokud existuje, bude okamžitý na výkon systému:

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

Aby byl trvalý, budete jej muset nakonfigurovat v konfiguračním souboru GRUB, jak je uvedeno níže v /etc/default/grub , znovu sestavit GRUB a restartovat systém.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"

Limity zdrojů – Limit otevřených souborů

Linux obvykle omezuje počet deskriptorů souborů, které může každý proces otevřít. U aktivního systému DB může tento limit snadno překročit nebo může ovlivnit výkon. Na mnoha systémech Linux je tento limit implicitně nastaven na 1024. Dále je zde možnost měkkých a tvrdých limitů.

Chcete-li zvýšit limit, můžete do souboru /etc/security/limits.conf přidat následující řádky:

mysql soft nofile 65535
mysql hard nofile 65535

Restart systému bude potřeba po příspěvku, který by uživatel mysql mohl vidět a používat nové limity. To lze zkontrolovat takto:

$ ulimit -Sn
65535
$ ulimit -Hn
65535

Omezení zdrojů – velikost základního souboru

Linux omezuje velikost základních souborů, jak je vidět v předchozím případě. Opět to má měkký a tvrdý limit a ve výchozím nastavení je měkký limit nastaven na 0, což efektivně zakáže generování souborů jádra. Chcete-li povolit generování základních souborů (další konfigurace potřebné pro generování výpisu paměti jádra), můžeme tuto hodnotu zvýšit v /etc/security/limits.conf jako:

mysql soft core unlimited
mysql hard core unlimited

Po restartu systému by uživatel mysql mohl vidět nové hodnoty pomocí příkazu ulimit jako:

$ ulimit -Sc
unlimited
$ ulimit -Hc
unlimited

Konfigurace Swappiness

Hodnota swappiness v Linuxu určuje, s jakou pravděpodobností systém přehodí stránku z paměti do odkládacího prostoru nakonfigurovaného v systému. Obvykle je výchozí hodnota nastavena na 60, kterou lze zkontrolovat z:

sysctl vm.swappiness

Jeho hodnota se může pohybovat od 0 do 100, kde nižší hodnota znamená nižší pravděpodobnost swapu. Na databázovém serveru, na kterém běží pouze MariaDB, bychom chtěli tuto hodnotu snížit na 0, abychom se co nejvíce vyhnuli používání swapu. Všimněte si, že nastavení hodnoty swappiness na 0 by mělo být prováděno opatrně s ohledem na další faktory návrhu systému, protože v případě velkého využití paměti nebo zatížení I/O existuje šance, že jádro zabije proces Out Of Memory (OOM).

Protože se pro databázové úlohy a jako takové pro databáze MariaDB doporučuje nastavení nízké swappiness, doporučuje se nastavit swappiness na hodnotu 1. Chcete-li, aby tato změna trvala, můžete přidat níže řádek v /etc/sysctl.conft:

vm.swappiness = 1

Změny se projeví po restartu systému, i když to můžete vždy provést předem pomocí příkazu sysctl:

sysctl -w vm.swappiness=1

Optimalizace souborového systému

Pro MariaDB jsou nejlepší linuxové souborové systémy obecně považovány za ext4, XFS a Btrfs, které jsou všechny součástí hlavního linuxového jádra a jsou široce podporovány. Tyto souborové systémy jsou dostupné ve většině distribucí Linuxu. Každý souborový systém má své jedinečné vlastnosti a vlastnosti a lze jej vybrat na základě požadavků po řádné kontrole.

Dále je nepravděpodobné, že budete muset zaznamenávat dobu přístupu k souboru na databázovém serveru. Můžeme to deaktivovat, abychom zlepšili výkon. Příslušný souborový systém můžete připojit pomocí volby noatime nebo jej přidat do možností připojení v souboru /etc/fstab, aby byl trvalý.

Optimalizace DB

Existuje několik laditelných interních funkcí MariaDB, které lze přizpůsobit na základě vlastních požadavků a potřeb.

Některé z nich zde probereme.

MariaDB je většinou konfigurován souborem my.cnf.

Na Ubuntu najdete my.cnf na:

/etc/mysql/my.cnf

Na CentOS se nachází na adrese:

/etc/my.cnf

Na podrobnou dokumentaci toho, jaké proměnné jsou k dispozici pro ladění v konfiguračním souboru, se můžete odvolat tady.

Hodně také záleží na typu enginu, který MariaDB používá, konkrétně na MyISAM a InnoDB nebo XtraDB. Oba mají své vlastní výhody a nevýhody a výběr jednoho závisí na požadavcích databáze a aplikace.

Měli bychom nastavit innodb_buffer_pool_size na přibližně 80 % vaší paměti. Tím je zajištěno, že 80 % vaší pracovní sady je v paměti.

Některé z dalších důležitých laditelných parametrů jsou:

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

Další podrobnosti o ladění proměnných InnoDB nebo XtraDB naleznete tady. Viz toto průvodce pro všechny dostupné možnosti ladění pro MariaDB.

Pokud máte zájem, podívejte se na tyto zdroje, abyste se naučili SQL a NoSQL.

Závěr

MariaDB je jednou z oblíbených možností, pokud jde o relační DBMS. Být open-source s různorodou komunitou k tomu přispívá.

Chcete-li se dozvědět více, podívejte se na jeho dokumentace která zahrnuje témata jako základní SQL, migrace, správa MariaDB, vysoká dostupnost, ladění výkonu, moduly úložiště, programování a přizpůsobení. Pokud nepoužíváte cluster, můžete také zakázat binární protokolování.