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