Învățăm împreună cum să instalăm și să configurăm MariaDB, un sistem de gestiune a bazelor de date relaționale (SGBDR) popular, derivat din MySQL.
Acesta este un proiect dezvoltat de comunitate, care oferă și opțiuni de suport comercial. MariaDB a fost proiectat pentru a menține un nivel înalt de compatibilitate cu MySQL, deși prezintă anumite diferențe.
În cadrul acestui articol, vom parcurge procesul de instalare și configurare a MariaDB pe sistemele Ubuntu 20.x și CentOS 7.x/8.x. La final, vom analiza câteva strategii esențiale pentru a asigura securitatea și a optimiza performanța acestuia.
MariaDB pe Ubuntu
Pe sistemele Ubuntu 20.x, MariaDB este disponibil direct din depozitele sale predefinite. Vom utiliza instrumentul apt pentru această operațiune.
Începem prin actualizarea informațiilor din depozitele apt folosind comanda:
$ sudo apt update
După ce datele din depozit sunt actualizate, executăm comanda:
$ sudo apt install mariadb-server
Această comandă va instala MariaDB și pachetele dependente. Confirmăm cu „Y” la orice prompt care poate apărea în timpul execuției comenzii anterioare.
Do you want to continue? [Y/n] Y
MariaDB pe CentOS 7.x
Pentru CentOS 7.x, versiunea de MariaDB disponibilă în depozitul implicit este 5.x. Vom instala cea mai recentă versiune disponibilă de MariaDB.
Pentru a realiza acest lucru, trebuie să configurăm inițial un depozit suplimentar yum. MariaDB oferă o metodă simplă prin intermediul scriptului `mariadb_repo_setup`. Pentru a obține configurația depozitului, executăm următoarele comenzi pe sistemul nostru 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
Acest script va configura depozitul yum necesar pentru a instala automat cea mai recentă versiune de MariaDB. La momentul scrierii acestui articol, aceasta este versiunea 10.x.
Alternativ, dacă preferăm o configurare manuală, putem crea un fișier de depozit yum, după cum urmează:
$ sudo vi /etc/yum.repos.d/MariaDB.repo
Apoi, adăugăm detaliile de mai jos în fișierul repo și îl salvăm:
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.5/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Acum, pentru a instala MariaDB, executăm comanda:
$ sudo yum install MariaDB-server
Confirmăm toate solicitările care apar în timpul instalării introducând „y”:
Is this ok [y/d/N]: y
Astfel se finalizează instalarea serverului MariaDB și a pachetelor dependente.
MariaDB pe CentOS 8.x
Pentru CentOS 8.x, versiunea disponibilă din depozitele implicite este 10.3 sau o versiune mai recentă. Putem instala direct MariaDB folosind comanda DNF:
sudo dnf install mariadb-server
Alternativ, pentru a obține cea mai recentă versiune, putem urma procedura manuală descrisă în secțiunea anterioară pentru CentOS 7.x, care ar trebui să funcționeze fără probleme.
Pornirea MariaDB
Pe un sistem Ubuntu, serviciul MariaDB va porni imediat după instalare. În cazul CentOS, este necesar să activăm și să pornim manual serviciile relevante.
Indiferent de sistemul de operare, executăm următoarele comenzi pentru a porni serviciul MariaDB, a-l activa la pornirea sistemului și a-i verifica starea:
$ sudo systemctl start mariadb.service $ sudo systemctl enable mariadb.service $ sudo systemctl status mariadb.service
Rezultatul așteptat:
$ 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. $
Securizarea MariaDB
Ca un prim pas esențial după instalarea MariaDB, este vital să securizăm instanța prin setarea unei parole pentru utilizatorul root, dezactivarea accesului root de la distanță, eliminarea bazei de date de testare, a utilizatorilor anonimi și reîncărcarea privilegiilor.
Pentru a securiza MariaDB, executăm comanda de mai jos:
$ sudo mysql_secure_installation
Putem urma indicațiile implicite, exceptând cazul în care avem cerințe speciale care necesită o abatere de la acestea.
Rezultatul tipic:
$ 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! $
În acest caz, vom folosi autentificarea sistemului, astfel încât nu am configurat o parolă root separată pentru MariaDB, deoarece aceasta este deja protejată. Dacă este necesar, se poate configura oricând o parolă root distinctă.
Validarea setărilor
Pentru a confirma configurarea MariaDB, rulăm următoarea comandă (specificând parola configurată în timpul procesului `mysql_secure_installation` sau, dacă am omis acel pas, folosind acreditările root ale sistemului):
$ 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 $
Putem configura un nou cont de administrator în locul celui root, după cum se arată mai jos (înlocuim valoarea `password` cu parola dorită pentru contul de administrator):
$ 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 $
Verificăm accesul cu noul utilizator administrator, folosind comanda următoare (introducem parola stabilită în pasul anterior):
$ 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 $
Optimizarea sistemului de operare
După instalarea și securizarea configurației MariaDB, trebuie să luăm măsuri pentru a optimiza atât sistemul de operare, cât și baza de date pentru a atinge performanțe optime. Aceste ajustări vor varia în funcție de specificul sistemului, tipul de utilizare, numărul de utilizatori și alți factori relevanți.
Din perspectiva sistemului de operare, putem configura anumite setări pentru a optimiza performanța MariaDB. Vom analiza aceste setări în continuare.
Setări Kernel Linux – Planificatorul IO
Planificatoarele IO recomandate pentru MariaDB sunt `noop` și `deadline`. Pentru a verifica planificatorul curent, folosim comanda `cat /sys/block/${DEVICE}/queue/scheduler`:
$ sudo cat /sys/block/sda/queue/scheduler [mq-deadline] kyber bfq none $
O modificare temporară poate fi realizată prin executarea următoarei comenzi. Orice îmbunătățire în performanța sistemului va fi imediat vizibilă:
$ sudo echo noop > /sys/block/sda/queue/scheduler
Pentru a face modificarea permanentă, va trebui să o configurăm în fișierul de configurare GRUB, așa cum se arată mai jos, în `/etc/default/grub`. Apoi reconstruim GRUB și repornim sistemul:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"
Limite de Resurse – Limita de fișiere deschise
Linux impune o limită în ceea ce privește numărul de descriptori de fișiere pe care un proces le poate deschide. Pentru un sistem de baze de date activ, această limită poate fi depășită cu ușurință, afectând negativ performanța. În multe sisteme Linux, limita implicită este de 1024. Există, de asemenea, opțiunea de limite „soft” și „hard”.
Pentru a mări această limită, adăugăm următoarele linii în fișierul `/etc/security/limits.conf`:
mysql soft nofile 65535 mysql hard nofile 65535
Este necesară o repornire a sistemului pentru ca utilizatorul mysql să poată vedea și să folosească noile limite. Putem verifica aceste limite cu:
$ ulimit -Sn 65535 $ ulimit -Hn 65535
Limite de Resurse – Dimensiunea Fișierului Core
Similar, Linux limitează dimensiunea fișierelor „core”. Implicit, limita „soft” este setată la 0, dezactivând efectiv generarea acestor fișiere. Pentru a permite generarea fișierelor core (și alte configurații necesare pentru generarea core dump), putem mări această valoare în `/etc/security/limits.conf`:
mysql soft core unlimited mysql hard core unlimited
După repornirea sistemului, utilizatorul mysql va putea observa noile valori folosind comanda `ulimit`:
$ ulimit -Sc unlimited $ ulimit -Hc unlimited
Configurarea Swappiness
Valoarea „swappiness” din Linux determină probabilitatea ca sistemul să aloce o pagină din memorie în spațiul de swap. În mod tipic, valoarea implicită este 60, care poate fi verificată cu comanda:
sysctl vm.swappiness
Valoarea poate varia între 0 și 100, o valoare mai mică indicând o probabilitate mai mică de alocare în swap. Pe un server de baze de date care rulează exclusiv MariaDB, este recomandat să reducem această valoare la 0, pentru a evita utilizarea spațiului de swap pe cât posibil. Totuși, modificarea valorii „swappiness” la 0 necesită atenție, luând în considerare alți factori de proiectare a sistemului, deoarece, în cazul utilizării intensive a memoriei sau a sarcinilor de lucru I/O, există riscul ca kernelul să inițieze procesul „Out Of Memory” (OOM).
Având în vedere că o valoare redusă a swappiness este preferabilă pentru sarcinile de lucru ale bazelor de date, este recomandat să setăm valoarea la 1 pentru bazele de date MariaDB. Putem adăuga linia de mai jos în fișierul `/etc/sysctl.conf` pentru a face această modificare permanentă:
vm.swappiness = 1
Modificările vor fi active după repornirea sistemului. Putem, de asemenea, să aplicăm modificarea imediat, folosind comanda `sysctl`:
sysctl -w vm.swappiness=1
Optimizarea sistemului de fișiere
Pentru MariaDB, cele mai potrivite sisteme de fișiere Linux sunt considerate în general ext4, XFS și Btrfs. Acestea sunt incluse în nucleul Linux și sunt disponibile pe majoritatea distribuțiilor. Fiecare sistem de fișiere are proprietăți și caracteristici unice, alegerea unuia fiind influențată de cerințe specifice, după o analiză corespunzătoare.
În general, este puțin probabil să fie necesară înregistrarea timpului de acces la fișiere pe un server de baze de date. Putem dezactiva această funcție pentru a îmbunătăți performanța. Se poate monta sistemul de fișiere relevant cu opțiunea `noatime` sau putem adăuga această opțiune în fișierul `/etc/fstab` pentru a o face permanentă.
Optimizarea Bazei de Date
Există numeroase setări interne ale MariaDB care pot fi personalizate în funcție de necesități și preferințe.
Vom discuta câteva dintre acestea în continuare.
Configurația MariaDB este în mare parte controlată de fișierul `my.cnf`.
Pe Ubuntu, acest fișier se află în:
/etc/mysql/my.cnf
În timp ce pe CentOS, îl găsim în:
/etc/my.cnf
Pentru o documentație detaliată referitoare la variabilele de configurare disponibile, se poate consulta următorul link.
Multe depind de asemenea de tipul de motor de stocare folosit de MariaDB, cum ar fi MyISAM, InnoDB sau XtraDB. Fiecare are propriile avantaje și dezavantaje, alegerea unuia depinzând de cerințele specifice ale bazei de date și ale aplicației.
În general, este recomandat să setăm `innodb_buffer_pool_size` la aproximativ 80% din memoria totală disponibilă. Acest lucru asigură că 80% din setul de lucru este stocat în memorie.
Alte variabile importante care pot fi ajustate sunt:
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
Mai multe detalii despre configurarea variabilelor InnoDB sau XtraDB sunt disponibile aici. Consultați acest ghid pentru toate opțiunile de optimizare disponibile pentru MariaDB.
Dacă sunteți interesat, consultați aceste resurse pentru a învăța SQL și NoSQL.
Concluzie
MariaDB se distinge ca o opțiune preferată în rândul sistemelor de gestionare a bazelor de date relaționale, fiind un proiect open-source cu o comunitate activă și diversă, ceea ce îi sporește atractivitatea.
Pentru mai multe informații, puteți consulta documentația oficială, care acoperă subiecte precum noțiuni fundamentale SQL, migrarea, administrarea MariaDB, disponibilitate ridicată, optimizarea performanței, motoare de stocare, programare și particularizare. De asemenea, poate fi util să dezactivați jurnalizarea binară, dacă nu folosiți un cluster.