Како инсталирати и конфигурисати МариаДБ на Убунту и ЦентОС

U ovom tekstu ćemo istražiti proces instalacije i konfiguracije MariaDB, popularnog sistema za upravljanje relacionim bazama podataka (RDBMS) otvorenog koda, koji je nastao kao fork MySQL-a.

MariaDB razvija zajednica i nudi opcije komercijalne podrške. Cilj joj je da ostane u velikoj meri kompatibilna sa MySQL-om, iako postoje neke ključne razlike.

U ovom članku, detaljno ćemo proći kroz instalaciju i podešavanje MariaDB na Ubuntu 20.x i CentOS 7.x/8.x. Na kraju ćemo razmotriti neke preporučene prakse za poboljšanje bezbednosti i performansi ovog sistema.

MariaDB na Ubuntu

Za Ubuntu 20.x, MariaDB je direktno dostupan iz standardnih repozitorijuma. Za instalaciju ćemo koristiti alatku apt.

Prvo, osvežite informacije o paketima sa:

$ sudo apt update

Nakon ažuriranja liste paketa, instalirajte MariaDB sa:

$ sudo apt install mariadb-server

Ovo će instalirati MariaDB i sve potrebne zavisnosti. Potvrdite instalaciju sa ‘Y’ kada budete upitani tokom izvršavanja ove komande.

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

MariaDB na CentOS 7.x

Verzija MariaDB dostupna u podrazumevanim repozitorijumima CentOS 7.x je 5.x. Mi ćemo instalirati najnoviju dostupnu verziju MariaDB.

Za ovaj korak, prvo moramo podesiti dodatni yum repozitorijum. MariaDB nudi praktičnu skriptu za podešavanje repozitorijuma, mariadb_repo_setup. Da biste dobili podešavanja repozitorijuma, pokrenite sledeće komande na vašem CentOS 7.x sistemu:

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

Ova skripta će automatski podesiti potrebne yum repozitorijume za instaliranje najnovije verzije MariaDB. U trenutku pisanja ovog članka, to je verzija 10.x.

Alternativno, ako želite ručno da konfigurišete yum repozitorijum, kreirajte novu repo datoteku:

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

Dodajte sledeće detalje u ovu datoteku i sačuvajte je:

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

Sada, instalirajte MariaDB pomoću komande:

$ sudo yum install MariaDB-server

Potvrdite sve upite tokom instalacije unosom ‘y’:

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

Ovim je završen proces instalacije MariaDB servera i pratećih paketa.

MariaDB na CentOS 8.x

Za CentOS 8.x, verzija dostupna u podrazumevanim repozitorijumima je 10.3 ili novija. MariaDB možete instalirati direktno pomoću dnf komande:

sudo dnf install mariadb-server

U suprotnom, za instaliranje najnovije dostupne verzije, možete slediti ručni postupak opisan u prethodnom odeljku za CentOS 7.x.

Pokretanje MariaDB

Na Ubuntu sistemu, MariaDB servis će se automatski pokrenuti nakon instalacije, dok na CentOS-u moramo ručno omogućiti i pokrenuti potrebne servise.

Bez obzira na operativni sistem, Ubuntu ili CentOS, pokrenite sledeće komande za pokretanje MariaDB servisa, njegovo automatsko pokretanje pri svakom paljenju i proveru njegovog statusa:

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

Izlaz:

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

Osiguravanje MariaDB

Prvi korak nakon instalacije MariaDB je obezbeđivanje instalacije postavljanjem root lozinke, onemogućavanjem udaljenog root pristupa, uklanjanjem test baze podataka i anonimnih korisnika, te ponovnim učitavanjem privilegija.

Pokrenite naredbu ispod da biste osigurali MariaDB:

$ sudo mysql_secure_installation

Pratite uputstva na ekranu, prihvatajući predložene akcije, osim ako imate određene razloge za odstupanje.

Izlaz:

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

U ovom primeru, koristićemo autentifikaciju na nivou operativnog sistema, tako da nismo postavili zasebnu root lozinku za MariaDB jer je već zaštićen. Ako je potrebno, uvek možete postaviti i zasebnu root lozinku.

Verifikacija podešavanja

Za proveru instalacije MariaDB, pokrenite sledeću komandu (unesite lozinku koju ste postavili tokom procesa mysql_secure_installation ili, ako je preskočen, koristite root akreditive vašeg sistema):

$ 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žete kreirati novi administratorski nalog umesto root naloga, kao što je prikazano u nastavku (promenite lozinku sa onom koju planirate da koristite):

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

Potvrdite pristup sa novim administratorom (unesite lozinku koju ste postavili u prethodnom koraku):

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

Optimizacija OS

Nakon instalacije i obezbeđivanja MariaDB, treba da preduzmete korake za podešavanje operativnog sistema i baze podataka za optimalne performanse. Ova podešavanja će varirati u zavisnosti od konfiguracije vašeg sistema, tipa korišćenja, broja korisnika i niza drugih faktora.

Iz perspektive operativnog sistema, neki sistemski parametri se mogu konfigurisati za MariaDB, o čemu ćemo sada diskutovati.

Podešavanja Linux kernela – IO Scheduler

Preporučeni IO planeri za MariaDB su noop i rok. Za proveru, koristite cat /sys/block/${DEVICE}/queue/scheduler

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

Privremena promena se može napraviti izdavanjem sledeće komande. Njen efekat, ukoliko postoji, biće odmah vidljiv na performanse sistema:

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

Za trajnu promenu, konfigurišite ovo u GRUB konfiguracionoj datoteci, kao što je prikazano ispod u /etc/default/grub, ponovo izradite GRUB i restartujte sistem.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"

Ograničenja resursa – Ograničenje otvorenih datoteka

Linux obično ograničava broj deskriptora datoteka koje svaki proces može da otvori. Za aktivan DB sistem, ovo ograničenje se može lako prekoračiti ili uticati na performanse. Na mnogim Linux sistemima, ovo ograničenje je po podrazumevanom 1024. Postoje opcije mekih i tvrdih ograničenja.

Za povećanje ovog ograničenja, dodajte sledeće redove u /etc/security/limits.conf:

mysql soft nofile 65535
mysql hard nofile 65535

Nakon što se korisnik MySQL prijavi, biće potrebno ponovno pokretanje sistema da bi nova ograničenja bila vidljiva i primenjena. Ovo se može proveriti sa:

$ ulimit -Sn
65535
$ ulimit -Hn
65535

Ograničenja resursa – Veličina core fajla

Linux ograničava veličinu core fajlova, kao što je viđeno u prethodnom slučaju. Opet, postoje meka i tvrda ograničenja. Po podrazumevanoj vrednosti, meko ograničenje je postavljeno na 0, što onemogućava generisanje core fajlova. Za omogućavanje generisanja core fajlova (druge konfiguracije su potrebne za generisanje core dump), možemo povećati ovu vrednost u /etc/security/limits.conf sa:

mysql soft core unlimited
mysql hard core unlimited

Nakon ponovnog pokretanja sistema, korisnik mysql-a može videti nove vrednosti koristeći ulimit komandu:

$ ulimit -Sc
unlimited
$ ulimit -Hc
unlimited

Konfigurišite swappiness

Vrednost swap-a u Linux-u određuje verovatnoću da sistem zameniti stranicu iz memorije u swap prostor koji je konfigurisan na sistemu. Uobičajena podrazumevana vrednost je 60 i može se proveriti pomoću:

sysctl vm.swappiness

Vrednost se može kretati od 0 do 100, gde niža vrednost znači manju verovatnoću swap-a. Na serveru baze podataka koji koristi isključivo MariaDB, želimo da smanjimo ovu vrednost na 0 da bismo izbegli upotrebu swap prostora što je više moguće. Imajte na umu da podešavanje swap-a na 0 treba obaviti pažljivo imajući u vidu druge faktore dizajna sistema, jer u slučaju velike upotrebe memorije ili I/O opterećenja, postoji rizik da kernel uništi proces (Out Of Memory – OOM).

Pošto se preporučuje niska swappiness za baze podataka i za MariaDB baze, preporučuje se postavljanje vrednosti swappiness na 1. Možete dodati red ispod u /etc/sysctl.conf da bi ova promena bila trajna:

vm.swappiness = 1

Promene će stupiti na snagu nakon ponovnog pokretanja sistema, mada uvek možete primeniti promene unapred koristeći sysctl komandu:

sysctl -w vm.swappiness=1

Optimizacija sistema datoteka

Za MariaDB, najbolji sistemi datoteka na Linux-u su ext4, XFS i Btrfs, koji su uključeni u glavno jezgro Linux-a i široko su podržani. Ovi sistemi datoteka su dostupni u većini Linux distribucija. Svaki sistem datoteka ima svoje jedinstvene karakteristike, i treba ga odabrati na osnovu specifičnih zahteva, nakon adekvatne procene.

Dalje, nije verovatno da ćete morati da beležite vreme pristupa datotekama na serveru baze podataka. Možemo da onemogućimo ovu funkciju za poboljšanje performansi. Montirajte odgovarajući sistem datoteka sa opcijom noatime ili dodajte ovu opciju u montiranje u datoteci /etc/fstab da bi promene bile trajne.

Optimizacija baze podataka

Postoji nekoliko podešavanja internih za MariaDB, koji se mogu prilagoditi na osnovu zahteva i potreba.

Ovde ćemo diskutovati o nekoliko najvažnijih.

MariaDB se uglavnom konfiguriše pomoću my.cnf datoteke.

Na Ubuntu sistemima, možete je naći na:

/etc/mysql/my.cnf

Dok je na CentOS-u, lokacija je:

/etc/my.cnf

Detaljna dokumentacija o promenljivim konfiguracije dostupna je ovde.

Mnogo zavisi od tipa mašine koju koristi MariaDB, kao što su MyISAM i InnoDB ili XtraDB. Svaka ima svoje prednosti i mane, a izbor zavisi od potreba baze podataka i aplikacije.

Trebalo bi da postavite innodb_buffer_pool_size na približno 80% vaše memorije. Ovo osigurava da se 80% vašeg radnog skupa nalazi u memoriji.

Neki od drugih važnih parametara za podešavanje su:

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

Više detalja o podešavanju InnoDB ili XtraDB varijabli možete pronaći ovde. Pogledajte ovaj vodič za sve dostupne opcije podešavanja za MariaDB.

Ako ste zainteresovani, pogledajte ove resurse da biste naučili SQL i NoSQL.

Zaključak

MariaDB je jedan od popularnih izbora kada je reč o relacionim sistemima za upravljanje bazama podataka (RDBMS). Otvoreni kod i aktivna zajednica doprinose njegovoj popularnosti.

Za dalje informacije, pogledajte zvaničnu dokumentaciju, koja uključuje teme kao što su osnove SQL-a, migracija, administracija MariaDB-a, visoka dostupnost, podešavanje performansi, sistemi za skladištenje, programiranje i prilagođavanje. Takođe, možda biste želeli da onemogućite binarno logovanje ako ne koristite klaster.