Jak nainstalovat a nakonfigurovat MariaDB na Ubuntu a CentOS

Pojďme si projít proces instalace a nastavení MariaDB, což je populární open-source systém pro správu relačních databází (RDBMS), který je kompatibilní s MySQL.

Tento databázový systém je vyvíjen komunitou a nabízí i komerční podporu. Ačkoli se MariaDB snaží udržet vysokou míru kompatibility s MySQL, existují mezi nimi určité rozdíly.

V tomto návodu se zaměříme na instalaci a konfiguraci MariaDB na operačních systémech Ubuntu 20.x a CentOS 7.x/8.x. Na závěr se podíváme na doporučené postupy pro zvýšení bezpečnosti a optimalizaci výkonu.

MariaDB na Ubuntu

V Ubuntu 20.x je MariaDB snadno dostupná z výchozích repozitářů. Pro instalaci využijeme správce balíčků apt.

Nejprve aktualizujeme informace o balíčcích:

$ sudo apt update

Po aktualizaci repozitářů můžeme přistoupit k instalaci samotné MariaDB pomocí příkazu:

$ sudo apt install mariadb-server

Tímto se nainstaluje MariaDB spolu s potřebnými závislostmi. Potvrďte instalaci stisknutím klávesy ‚Y‘, pokud se objeví dotaz během procesu instalace.

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

MariaDB na CentOS 7.x

Pro CentOS 7.x je dostupná starší verze MariaDB (5.x) z výchozích repozitářů. My si nainstalujeme nejaktuálnější dostupnou verzi.

K tomu musíme přidat nový repozitář yum. MariaDB nabízí praktický skript „mariadb_repo_setup“ pro snadné přidání potřebného repozitáře. Pro přidání repozitáře spusťte v CentOS 7.x tyto 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 provede nastavení potřebného repozitáře yum pro automatickou instalaci nejnovější dostupné verze MariaDB (v době psaní tohoto článku je to verze 10.x).

Alternativně, pokud preferujete ruční metodu, můžete vytvořit nový soubor repozitáře:

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

Do tohoto souboru vložte následující obsah 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 použijte tento příkaz:

$ sudo yum install MariaDB-server

Potvrďte všechny výzvy během instalace zadáním ‚y‘:

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

Tímto je instalace MariaDB serveru a všech potřebných balíčků dokončena.

MariaDB na CentOS 8.x

Pro CentOS 8.x je verze 10.3 nebo novější k dispozici přímo ve výchozích repozitářích. Můžete tedy MariaDB nainstalovat přímo pomocí příkazu DNF:

sudo dnf install mariadb-server

Pokud chcete nainstalovat nejaktuálnější verzi, můžete použít ruční postup popsaný v sekci pro CentOS 7.x.

Spuštění MariaDB

Na Ubuntu se služba MariaDB spustí automaticky po instalaci. Na CentOS je nutné službu povolit a spustit ručně.

Pro oba systémy (Ubuntu i CentOS) použijte následující příkazy pro spuštění, povolení automatického spouštění při startu systému a ověření stavu služby:

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

Výstup z příkazů:

$ 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

Po úspěšné instalaci MariaDB je důležité zabezpečit ji. To zahrnuje nastavení hesla pro uživatele root, zakázání vzdáleného přihlašování uživatele root, odstranění testovací databáze a anonymních uživatelů, a nakonec aktualizaci oprávnění.

Pro zabezpečení MariaDB použijte tento příkaz:

$ sudo mysql_secure_installation

Pokud nemáte specifické požadavky, můžete se řídit doporučenými možnostmi během průvodce.

Výstup z průvodce:

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

V tomto průvodci využijeme autentizaci pomocí unix socketu, takže pro uživatele root nenastavujte samostatné heslo, protože je již chráněn. Pokud chcete, můžete si heslo později nastavit.

Ověření nastavení

Pro ověření správného nastavení MariaDB použijte následující příkaz (zadejte heslo, které jste nastavili při spuštění mysql_secure_installation, nebo použijte přihlašovací údaje vašeho systémového root uživatele, pokud jste heslo nenastavovali):

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

Doporučuje se vytvořit nového administrátorského uživatele namísto uživatele root, jak je uvedeno níže (nahraďte „password“ skutečným heslem, které chcete použít):

$ 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 s novým administrátorským uživatelem (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 Operačního Systému

Po instalaci a zabezpečení MariaDB byste měli provést optimalizaci operačního systému a databáze pro dosažení optimálního výkonu. Optimalizace se může lišit v závislosti na konfiguraci systému, způsobu použití, počtu uživatelů a dalších faktorech.

V této části se budeme zabývat konfigurací některých systémových parametrů pro MariaDB.

Nastavení Linuxového Jádra – IO Scheduler

Doporučené plánovače I/O pro MariaDB jsou noop a deadline. Pro kontrolu aktuálního plánovače použijte příkaz:

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

Dočasnou změnu provedete pomocí následujícího příkazu (změna se projeví ihned):

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

Pro trvalou změnu je nutné upravit konfigurační soubor GRUB (/etc/default/grub), aktualizovat GRUB a restartovat systém.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"

Limity Zdroju – Limit Otevřených Souborů

Linux obvykle omezuje počet souborových deskriptorů, které může proces otevřít. U databázového systému může být tento limit snadno překročen, což může ovlivnit výkon. Výchozí limit bývá 1024. Existují měkké a tvrdé limity.

Pro zvýšení limitu přidejte do souboru /etc/security/limits.conf tyto řádky:

mysql soft nofile 65535
mysql hard nofile 65535

Po úpravě a restartu systému by měl uživatel mysql vidět nové limity. Můžete to zkontrolovat takto:

$ ulimit -Sn
65535
$ ulimit -Hn
65535

Omezení Zdroju – Velikost Základního Souboru

Linux omezuje i velikost základních souborů, podobně jako v předchozím případě. Opět platí, že existují měkké a tvrdé limity a měkký limit je obvykle nastaven na 0, což zakazuje generování základních souborů. Pro povolení generování základních souborů můžeme zvýšit tento limit v souboru /etc/security/limits.conf:

mysql soft core unlimited
mysql hard core unlimited

Po restartu systému by měl uživatel mysql vidět nové limity pomocí příkazu ulimit:

$ ulimit -Sc
unlimited
$ ulimit -Hc
unlimited

Konfigurace Swappiness

Parametr swappiness v Linuxu určuje, jak často bude systém odkládat stránky paměti do odkládacího prostoru. Výchozí hodnota je 60 a můžete ji zkontrolovat pomocí:

sysctl vm.swappiness

Hodnota se může pohybovat od 0 do 100, kde nižší hodnota znamená nižší pravděpodobnost swapování. Pro databázový server, kde běží pouze MariaDB, je vhodné tuto hodnotu snížit na 0, abyste minimalizovali používání swapu. Nastavení hodnoty swappiness na 0 vyžaduje opatrnost, protože při velkém zatížení paměti může jádro ukončit proces Out Of Memory (OOM).

Pro databázové systémy, jako je MariaDB, je doporučeno nastavit hodnotu swappiness na 1. Pro trvalou změnu přidejte do souboru /etc/sysctl.conf tento řádek:

vm.swappiness = 1

Změna se projeví po restartu, ale můžete ji ihned aktivovat pomocí příkazu sysctl:

sysctl -w vm.swappiness=1

Optimalizace Souborového Systému

Pro MariaDB se obecně doporučují souborové systémy ext4, XFS a Btrfs. Tyto souborové systémy jsou součástí hlavního linuxového jádra a jsou široce podporované. Každý z nich má své specifické vlastnosti, a výběr by měl být proveden na základě požadavků.

Dále, je nepravděpodobné, že byste potřebovali zaznamenávat čas přístupu k souborům na databázovém serveru. Deaktivací této funkce můžete zvýšit výkon. Toho dosáhnete připojením souborového systému s volbou noatime, nebo přidáním do konfigurace v /etc/fstab.

Optimalizace Databáze

Existuje několik interních nastavení MariaDB, které můžete upravit na základě vašich požadavků a potřeb.

Některé z nich si nyní projdeme.

MariaDB je většinou konfigurována pomocí souboru my.cnf.

V Ubuntu najdete my.cnf zde:

/etc/mysql/my.cnf

V CentOS je to zde:

/etc/my.cnf

Podrobnou dokumentaci k proměnným dostupným pro konfiguraci najdete zde.

Záleží také na typu úložného enginu, který MariaDB používá – MyISAM, InnoDB nebo XtraDB. Každý z nich má své výhody a nevýhody a výběr závisí na požadavcích databáze a aplikace.

Doporučuje se nastavit innodb_buffer_pool_size na přibližně 80% dostupné RAM. Tím zajistíte, že 80% pracovních dat bude v paměti.

Další důležité parametry k úpravě 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ší informace o ladění proměnných InnoDB a XtraDB naleznete zde. Podívejte se také na tento návod, kde najdete všechny dostupné možnosti pro optimalizaci MariaDB.

Pokud vás zajímá více, podívejte se na tyto zdroje pro studium SQL a NoSQL.

Závěr

MariaDB je populární volbou pro relační databázové systémy, také díky jejímu open-source charakteru a aktivní komunitě.

Pro více informací navštivte dokumentaci, která pokrývá témata jako SQL, migrace, správa MariaDB, vysoká dostupnost, ladění výkonu, úložné enginy, programování a možnosti přizpůsobení. Pokud nepoužíváte cluster, můžete také zakázat binární protokolování.