Cum se instalează, securizează și regla performanța serverului de baze de date MariaDB


Un server de baze de date este o componentă critică a infrastructurii de rețea necesară pentru aplicațiile actuale. Fără capacitatea de a stoca, prelua, actualiza și șterge date (când este necesar), utilitatea și domeniul de aplicare al aplicațiilor web și desktop devin foarte limitate.

În plus, a ști cum să instalezi, să gestionezi și să configurezi un server de baze de date (astfel încât să funcționeze conform așteptărilor) este o abilitate esențială pe care trebuie să o aibă fiecare administrator de sistem.

În acest articol vom analiza pe scurt cum să instalați și să securizați un server de baze de date MariaDB și apoi vă vom explica cum să îl configurați.

Instalarea și securizarea unui server MariaDB

În CentOS 7.x, MariaDB a înlocuit MySQL, care încă poate fi găsit în Ubuntu (împreună cu MariaDB). Același lucru este valabil și pentru openSUSE.

Pentru concizie, vom folosi doar MariaDB în acest tutorial, dar vă rugăm să rețineți că, pe lângă denumiri și filozofii de dezvoltare diferite, atât Sisteme de management al bazelor de date relaționale (RDBMS pe scurt) sunt aproape identice.

Aceasta înseamnă că comenzile de pe partea clientului sunt aceleași atât pe MySQL, cât și pe MariaDB, iar fișierele de configurare sunt denumite și localizate în aceleași locuri.

Pentru a instala MariaDB, faceți:

--------------- On CentOS/RHEL 7 and Fedora 23 --------------- 
yum update && yum install mariadb mariadb-server # CentOS 

--------------- On Debian and Ubuntu --------------- 
sudo aptitude update && sudo aptitude install mariadb-client mariadb-server 

--------------- On openSUSE --------------- 
zypper update && zypper install mariadb mariadb-tools # openSUSE

Rețineți că, în Ubuntu, vi se va cere să introduceți o parolă pentru utilizatorul root RDBMS.

Odată ce pachetele de mai sus au fost instalate, asigurați-vă că serviciul de bază de date rulează și a fost activat pentru a porni la pornire (în CentOS și openSUSE va trebui să efectuați această operație manual , în timp ce în Ubuntu procesul de instalare se va fi ocupat deja de el pentru tine):

--------------- On CentOS/RHEL 7 and Fedora 23 --------------- 
systemctl start mariadb && systemctl enable mariadb 

--------------- On openSUSE --------------- 
systemctl start mysql && systemctl enable mysql

Apoi rulați scriptul mysql_secure_installation. Acest proces vă va permite să:

  1. setați/resetați parola pentru utilizatorul root RDBMS
  2. eliminați conectările anonime (permițând astfel doar utilizatorilor cu un cont valid să se conecteze la RDBMS)
  3. dezactivați accesul root pentru mașini, altele decât localhost
  4. eliminați baza de date de testare (pe care oricine o poate accesa)
  5. activați modificările asociate cu 1 până la 4.

Pentru o descriere mai detaliată a acestui proces, puteți consulta secțiunea Post-instalare din Instalarea bazei de date MariaDB în RHEL/CentOS/Fedora și Debian/Ubuntu.

Configurarea serverului MariaDB

Opțiunile implicite de configurare sunt citite din următoarele fișiere în ordinea dată: /etc/mysql/my.cnf, /etc/my.cnf și ~ /.my.cnf.

Cel mai adesea, doar /etc/my.cnf există. În acest fișier vom seta setările la nivel de server (care pot fi înlocuite cu aceleași setări în ~/.my.cnf pentru fiecare utilizator).

Primul lucru pe care trebuie să-l remarcăm despre my.cnf este că setările sunt organizate în categorii (sau grupuri) în care numele fiecărei categorii este cuprins între paranteze drepte.

Configurațiile sistemului serverului sunt date în secțiunea [mysqld], unde de obicei veți găsi doar primele două setări în tabelul de mai jos. Restul sunt alte opțiuni frecvent utilizate (unde este indicat, vom schimba valoarea implicită cu una personalizată la alegerea noastră):

Setting and description

Valoare implicită

datadir is the directory where the data files are stored.

datadir=/var/lib/mysql

socket indicates the name and location of the socket file that is used for local client connections. Keep in mind that a socket file is a resource that is utilized to pass information between applications.

socket=/var/lib/mysql/mysql.sock

bind_address is the address where the database server will listen on for TCP/IP connections. If you need your server to listen on more than one IP address, leave out this setting (0.0.0.0 which means it will listen on all IP addresses assigned to this specific host).

We will change this to instruct the service to listen only on its main address (192.168.0.13):

bind_address=192.168.0.13

bind_address=0.0.0.0

port represents the port where the database server will be listening.

We will replace the default value(3306) with 20500 (but we need to make sure nothing else is using that port):
port=20500

While some people will argue that security through obscurity is not good practice, changing the default application ports for higher ones is a rudimentary -yet effective- method to discourage port scans.

port=3306

innodb_buffer_pool_size is the buffer pool (in bytes) of memory that is allocated for data and indexes that are accessed frequently when using Innodb (which is the default in MariaDB) or XtraDB as storage engine.

We will replace the default value with 256 MB:

innodb_buffer_pool_size=256M

innodb_buffer_pool_size=134217728

skip_name_resolve indicates whether hostnames will be resolved or not on incoming connections. If set to 1, as we will do in this guide, only IP addresses.

Unless you require hostnames to determine permissions, it is advisable to disable this variable (in order to speed up connections and queries) by setting its value to 1:

skip_name_resolve=1

skip_name_resolve=0

query_cache_size represents the size (in bytes) available to the query cache in disk, where the results of SELECT queries are stored for future use when an identical query (to the same database and using the same protocol and same character set) is performed.

You should choose a query cache size that matches your needs based on 1) the number of repetitive queries, and 2) the approximate number of records those repetitive queries are expected to return. We will set this value to 100 MB for the time being:

query_cache_size=100M

query_cache_size=0 (ceea ce înseamnă că este dezactivat implicit)

max_connections is the maximum number of simultaneous client connections to the server. We will set this value to 30:
max_connections=30Each connection will use a thread, and thus will consume memory. Take this fact into account while setting max_connections.

max_connections=151

thread_cache_size indicates the numbers of threads that the server allocates for reuse after a client disconnects and frees thread(s) previously in use. In this situation, it is cheaper (performance-wise) to reuse a thread than instantiating a new one.

Again, this depends on the number of connections you are expecting. We can safely set this value to half the number of max_connections:

thread_cache_size=15

thread_cache_size=0 (dezactivat implicit)

În CentOS, va trebui să îi spunem SELinux să permită MariaDB să asculte pe un port non-standard (20500 ) înainte de a reporni serviciul:

yum install policycoreutils-python
semanage port -a -t mysqld_port_t -p tcp 20500

Apoi reporniți serviciul MariaDB.

Reglarea performanței MariaDB

Pentru a ne ajuta să verificăm și să reglam configurația conform nevoilor noastre specifice, putem instala mysqltuner (un script care va oferi sugestii pentru a îmbunătăți performanța serverului nostru de baze de date și a crește stabilitatea acestuia):

wget https://github.com/major/MySQLTuner-perl/tarball/master
tar xzf master

Apoi schimbați directorul în folderul extras din tarball (versiunea exactă poate diferi în cazul dvs.):

cd major-MySQLTuner-perl-7dabf27

și rulați-l (vi se va solicita să introduceți acreditările contului dvs. administrativ MariaDB)

./mysqltuner.pl

Ieșirea scriptului este în sine foarte interesantă, dar să trecem la partea de jos, unde variabilele de ajustat sunt listate cu valoarea recomandată:

Setarea query_cache_type indică dacă memoria cache a interogărilor este dezactivată (0) sau activată (1). În acest caz, mysqltuner ne sfătuiește să-l dezactivăm.

Deci, de ce ni se recomandă să-l dezactivăm acum? Motivul este că cache-ul de interogări este util mai ales în scenariile cu citire ridicată/scriere scăzută (ceea ce nu este cazul nostru, deoarece tocmai am instalat serverul de baze de date).

AVERTISMENT: înainte de a face modificări în configurația unui server de producție, vă recomandăm să consultați un administrator expert al bazei de date pentru a vă asigura că o recomandare dată de mysqltuner nu va avea un impact negativ pe o setare existentă.

rezumat

În acest articol am explicat cum să configurați un server de baze de date MariaDB după ce l-am instalat și securizat. Variabilele de configurare enumerate în tabelul de mai sus sunt doar câteva setări pe care poate doriți să le luați în considerare atunci când pregătiți serverul pentru utilizare sau când îl reglați ulterior. Consultați întotdeauna documentația oficială MariaDB înainte de a face modificări sau consultați sfaturile noastre de reglare a performanței MariaDB:

Nu ratați: 15 sfaturi utile de optimizare și optimizare a performanței MariaDB

Ca întotdeauna, nu ezitați să ne anunțați dacă aveți întrebări sau comentarii despre acest articol. Există alte setări de server pe care doriți să le utilizați? Simțiți-vă liber să împărtășiți cu restul comunității folosind formularul de comentarii de mai jos.