Kako instalirati, bezbedno i podešavanje performansi MariaDB servera baze podataka


Server baze podataka je kritična komponenta mrežne infrastrukture neophodne za današnje aplikacije. Bez mogućnosti pohranjivanja, preuzimanja, ažuriranja i brisanja podataka (po potrebi), korisnost i opseg web i desktop aplikacija postaje vrlo ograničen.

Pored toga, znanje kako da instalirate, upravljate i konfigurišete server baze podataka (tako da radi kako se očekuje) neophodna je veština koju svaki administrator sistema mora imati.

U ovom članku ćemo ukratko pregledati kako instalirati i osigurati MariaDB poslužitelj baze podataka, a zatim ćemo objasniti kako ga konfigurirati.

Instaliranje i osiguranje MariaDB servera

U CentOS 7.x, MariaDB je zamijenio MySQL, koji se još uvijek može naći u Ubuntu (zajedno sa MariaDB). Isto vrijedi i za openSUSE.

Radi kratkoće, u ovom vodiču ćemo koristiti samo MariaDB, ali imajte na umu da osim različitih naziva i razvojne filozofije, oba Sistema upravljanja relacijskim bazama podataka (RDBMS jako> skraćeno) su gotovo identične.

To znači da su komande na strani klijenta iste na MySQL i MariaDB, a konfiguracijske datoteke su imenovane i smještene na istim mjestima.

Da instalirate MariaDB, uradite:

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

Imajte na umu da će se u Ubuntuu od vas tražiti da unesete lozinku za RDBMS root korisnika.

Nakon što su gore navedeni paketi instalirani, uvjerite se da je usluga baze podataka pokrenuta i da je aktivirana za pokretanje pri pokretanju (u CentOS i openSUSE morat ćete ovu operaciju izvesti ručno , dok će se u Ubuntu proces instalacije već pobrinuti za to umjesto vas):

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

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

Zatim pokrenite skriptu mysql_secure_installation. Ovaj proces će vam omogućiti da:

  1. postaviti/resetirati lozinku za RDBMS root korisnika
  2. ukloniti anonimne prijave (na taj način omogućavajući samo korisnicima s važećim računom da se prijave na RDBMS)
  3. onemogući root pristup za mašine koje nisu localhost
  4. uklonite testnu bazu podataka (kojoj svako može pristupiti)
  5. aktivirajte promjene povezane sa 1 do 4.

Za detaljniji opis ovog procesa, možete pogledati odjeljak Nakon instalacije u Instalacija MariaDB baze podataka u RHEL/CentOS/Fedora i Debian/Ubuntu.

Konfiguriranje MariaDB servera

Zadane opcije konfiguracije se čitaju iz sljedećih datoteka datim redoslijedom: /etc/mysql/my.cnf, /etc/my.cnf i ~ /.my.cnf.

Najčešće postoji samo /etc/my.cnf. Na ovoj datoteci ćemo postaviti postavke za cijeli server (koje se mogu zamijeniti istim postavkama u ~/.my.cnf za svakog korisnika).

Prva stvar koju trebamo primijetiti o my.cnf je da su postavke organizirane u kategorije (ili grupe) gdje je naziv svake kategorije zatvoren uglastim zagradama.

Konfiguracije serverskog sistema su date u odjeljku [mysqld], gdje ćete obično pronaći samo prve dvije postavke u tabeli ispod. Ostalo su druge često korištene opcije (gdje je naznačeno, promijenit ćemo zadanu vrijednost prilagođenom po našem izboru):

Setting and description

Zadana vrijednost

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 (što znači da je po defaultu onemogućen)

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 (onemogućeno prema zadanim postavkama)

U CentOSu, morat ćemo reći SELinuxu da dozvoli MariaDB da sluša na nestandardnom portu (20500 ) prije ponovnog pokretanja usluge:

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

Zatim ponovo pokrenite MariaDB uslugu.

Podešavanje performansi MariaDB

Kako bismo nam pomogli u provjeri i podešavanju konfiguracije prema našim specifičnim potrebama, možemo instalirati mysqltuner (skriptu koja će dati prijedloge za poboljšanje performansi našeg poslužitelja baze podataka i povećanje njegove stabilnosti):

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

Zatim promijenite direktorij u mapu izvađenu iz tarball-a (tačna verzija može se razlikovati u vašem slučaju):

cd major-MySQLTuner-perl-7dabf27

i pokrenite ga (od vas će biti zatraženo da unesete vjerodajnice vašeg administrativnog MariaDB naloga)

./mysqltuner.pl

Izlaz skripte je sam po sebi vrlo zanimljiv, ali preskočimo na dno gdje su navedene varijable koje treba prilagoditi s preporučenom vrijednošću:

Postavka query_cache_type pokazuje da li je keširanje upita onemogućeno (0) ili omogućeno (1). U ovom slučaju, mysqltuner nas savjetuje da ga onemogućimo.

Pa zašto nam se savjetuje da ga deaktiviramo sada? Razlog je taj što je keš upita koristan uglavnom u scenarijima visokog čitanja/niskog pisanja (što nije naš slučaj, pošto smo upravo instalirali server baze podataka).

UPOZORENJE: Prije izmjena konfiguracije proizvodnog servera, preporučujemo vam da se posavjetujete sa stručnim administratorom baze podataka kako biste osigurali da preporuka koju daje mysqltuner neće negativno utjecati na postojećoj postavci.

Sažetak

U ovom članku smo objasnili kako konfigurirati MariaDB poslužitelj baze podataka nakon što smo ga instalirali i osigurali. Konfiguracijske varijable navedene u gornjoj tabeli su samo nekoliko postavki koje biste mogli uzeti u obzir dok pripremate server za korištenje ili kada ga kasnije podešavate. Uvijek pogledajte zvaničnu MariaDB dokumentaciju prije unošenja promjena ili pogledajte naše savjete za podešavanje MariaDB Performance:

Ne propustite: 15 korisnih savjeta za podešavanje i optimizaciju performansi MariaDB-a

Kao i uvijek, ne ustručavajte se javiti nam ako imate bilo kakvih pitanja ili komentara o ovom članku. Postoje li još neke postavke servera koje volite koristiti? Slobodno podijelite s ostatkom zajednice koristeći formu za komentare ispod.